博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【拓扑排序】确定比赛名次
阅读量:6763 次
发布时间:2019-06-26

本文共 2226 字,大约阅读时间需要 7 分钟。

拓扑排序裸题qwq

注意:入度为一的点删掉之后,它的入度要更新为-1

这个题刷出了我人生中第一次PE 可还行qaq

我搜索PE是输出格式与标准输出不符, 结果发现语言选成G++ orz

想起来《%你抄》 “原来CE,只因选错语言” 可我PE,也是选错语言啊啊啊啊啊QAQ

代码君qwq

1 #include
2 #include
3 #include
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

原因如下:(我很懵逼qaq

HDU你是魔鬼吗???

1 #include
2 #include
3 #include
4 using namespace std; 5 const int sz = 505; 6 struct edge { 7 int nxt, to; 8 }e[sz<<1]; 9 priority_queue
, greater
>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实在是找不到用邻接表存图且不用指针的(美妙)代码了

难受香菇(想吃香菇馅的水饺啦啦啦啦)

 

转载于:https://www.cnblogs.com/Hwjia/p/9789618.html

你可能感兴趣的文章