我觉得这题与1285的题意是一样的但是同样的题对于
3 1
31
这组数据输出结果的要求却不一样,我也是不知道为什么
#include<iostream> #include<queue> #include<vector> #include<cstring> #include<cstdio> #define maxn 30000+5 using namespace std; vector<vector<int> >mapp; //char visit[maxn][maxn]; int n,m; int head[maxn]; int re[maxn]; void topo() { int t=n; priority_queue<int>root; for(int i=1;i<=n;i++) { if(!head[i]) root.push(i); } while(root.size()) { int x=root.top(); re[--t]=x; root.pop(); for(int i=0;i<mapp[x].size();i++) { head[mapp[x][i]]--; if(!head[mapp[x][i]]) root.push(mapp[x][i]); } } } void print() { printf("%d",re[0]); for(int i=1;;i++) { if(!re[i]){break;} printf(" %d",re[i]); } printf("\n"); } int main() { int t; cin>>t; cin.sync_with_stdio(false); while(t--) { scanf("%d%d",&n,&m); mapp.resize(n+1); for(int i=0;i<n+1;i++) head[i]=0,re[i]=0,mapp[i].clear(); int x,y; while(m--) { scanf("%d%d",&x,&y); mapp[y].push_back(x); head[x]++; } topo(); print(); } return 0; }
时间: 2024-10-25 06:10:44