HDU P1285 确定比赛名次
拓扑排序裸题qwq
注意:入度为一的点删掉之后,它的入度要更新为-1
这个题刷出了我人生中第一次PE 可还行qaq
我搜索PE是输出格式与标准输出不符, 结果发现语言选成G++ orz
想起来《%你抄》 “原来CE,只因选错语言” 可我PE,也是选错语言啊啊啊啊啊QAQ
代码君qwq
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 ", ans[n]); 36 } 37 return 0; 38 }
这是我写的邻接表存图的拓扑排序,自认为没有错误但交上去就ce
原因如下:(我很懵逼qaq
HDU你是魔鬼吗???
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 ", ans[n]); 39 } 40 return 0; 41 }
在看拓扑排序qaq实在是找不到用邻接表存图且不用指针的(美妙)代码了
难受香菇(想吃香菇馅的水饺啦啦啦啦)