UVA10305 给任务排序 Ordering Tasks
  • 板块学术版
  • 楼主szhqwq
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/8/19 20:36
  • 上次更新2023/10/27 14:32:50
查看原帖
UVA10305 给任务排序 Ordering Tasks
638084
szhqwq楼主2022/8/19 20:36

《当拓扑序莫名调换顺序》

就离谱

#include <bits/stdc++.h>
#define int long long
#define M memset(h,-1,sizeof h),memset(d,0,sizeof d)
using namespace std;

const int N=10010;

int n,m;
int e[N],ne[N],h[N],idx;
int d[N],q[N];

void add(int a,int b) { e[idx]=b,ne[idx]=h[a],h[a]=idx++; }

void topsort() {
	int hh=0,tt=-1;
	for(int i=1;i<=n;i++) { if(!d[i]) { q[++tt]=i; cout<<i<<" "; } }
	while(hh<=tt) {
		int t=q[hh++];
		for(int i=h[t];i!=-1;i=ne[i]) {
			int j=e[i];
			d[j]--;
			if(d[j]==0) q[++tt]=j,cout<<j<<" ";
		}
	}
	cout<<endl;
	return;
}

signed main() {
	while(1) {
		cin>>n>>m;
		if(n==0 && m==0) return 0;
		M;
		for(int i=1;i<=m;i++) {
			int a,b;
			cin>>a>>b;
			add(a,b);
			d[b]++;
		}
		topsort();
	}
	return 0;
}
		$Thanks$
2022/8/19 20:36
加载中...