题目链接:点击打开链接
题目大意:略。
解题思路:略。
AC 代码
usingnamespacestd; typedeflonglongll; constintmaxn=520; intn; intg[maxn][maxn], in[maxn]; priority_queue<int,vector<int>,greater<int>>pq; vector<int>vec; voidinit() { mem(g,0), mem(in,0); while(!pq.empty()) pq.pop(); vec.clear(); } voidtopo() { for(inti=1;i<=n;i++) if(in[i]==0) pq.push(i); inttp; while(!pq.empty()) { tp=pq.top(); pq.pop(); vec.push_back(tp); for(inti=1;i<=n;i++) if(g[tp][i] &&--in[i]==0) pq.push(i); } } intmain() { intm,u,v; while(~scanf("%d%d",&n,&m)) { init(); for(inti=0;i<m;i++) { scanf("%d%d",&u,&v); if(g[u][v]==0&&u!=v) { g[u][v]=1; in[v]++; } } topo(); if(vec.size()!=n) puts("-1"); else { for(inti=0;i<vec.size();i++) printf("%d%c",vec[i],i==vec.size()-1?'\n':' '); } } return0; }