拓撲排序裸題qwqphp
注意:入度爲一的點刪掉以後,它的入度要更新爲-1ios
這個題刷出了我人生中第一次PE 可還行qaqspa
我搜索PE是輸出格式與標準輸出不符, 結果發現語言選成G++ orz指針
想起來《%你抄》 「原來CE,只因選錯語言」 可我PE,也是選錯語言啊啊啊啊啊QAQcode
代碼君qwqblog
1 #include<cstdio> 2 #include<cstring> 3 #include<iostream> 4 using namespace std; 5 const int sz = sz; 6 int n, m; 7 int plat[sz][sz], in[sz], ans[sz]; 8 int main() { 9 while(~scanf("%d%d", &n, &m)) { 10 memset(plat, 0, sizeof(plat)); 11 memset(in, 0, sizeof(in)); 12 int cnt = 0, flag = 0, x, y; 13 for(int i = 1; i <= m; i++) { 14 scanf("%d%d", &x, &y); 15 if(!plat[x][y]) { 16 plat[x][y] = 1; 17 in[y]++; 18 } 19 } 20 while(cnt < n) { 21 for(int i = 1; i <= n; i++) { 22 if(in[i]==0) { 23 in[i] = -1; 24 ans[++cnt] = i; 25 flag = i; 26 break; 27 } 28 } 29 for(int i = 1; i <= n; i++) { 30 if(plat[flag][i]) in[i]--; 31 } 32 } 33 for(int i = 1; i < n; i++) 34 printf("%d ", ans[i]); 35 printf("%d\n", ans[n]); 36 } 37 return 0; 38 }
這是我寫的鄰接表存圖的拓撲排序,自認爲沒有錯誤但交上去就ce排序
緣由以下:(我很懵逼qaqget
HDU你是魔鬼嗎???string
1 #include<queue> 2 #include<cstdio> 3 #include<iostream> 4 using namespace std; 5 const int sz = 505; 6 struct edge { 7 int nxt, to; 8 }e[sz<<1]; 9 priority_queue<int, vector<int>, greater<int> >q; 10 int n, m, x, y, num = 0, cnt = 0, in[sz], ans[sz], head[sz]; 11 void add(int from, int to) { 12 in[to]++; 13 e[++num].nxt = head[from]; 14 e[num].to = to; 15 head[from] = num; 16 } 17 int main() { 18 while(~scanf("%d%d", &n, &m)) { 19 for(int i = 1; i <= m; i++) { 20 scanf("%d%d", &x, &y); 21 add(x, y); 22 } 23 for(int i = 1; i <= n; i++) { 24 if(!in[i]) q.push(i); 25 } 26 while(!q.empty()) { 27 int u = q.top(); 28 q.pop(); 29 ans[++cnt] = u; 30 for(int i = head[u]; i; i = e[i].nxt) { 31 int v = e[i].to; 32 in[v]--; 33 if(!in[v]) q.push(v); 34 } 35 } 36 for(int i = 1; i < n; i++) 37 printf("%d ", ans[i]); 38 printf("%d\n", ans[n]); 39 } 40 return 0; 41 }
在看拓撲排序qaq實在是找不到用鄰接表存圖且不用指針的(美妙)代碼了it
難受香菇(想吃香菇餡的水餃啦啦啦啦)