听说灌水区都是大佬,求调
  • 板块灌水区
  • 楼主Night_early
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/7/22 17:40
  • 上次更新2024/7/22 19:12:07
查看原帖
听说灌水区都是大佬,求调
1104938
Night_early楼主2024/7/22 17:40

P3243 WA on#6

#include <bits/stdc++.h>
using namespace std;
#define MAXN 100005
int t,n,m,head[MAXN],ts[MAXN],in[MAXN],cnt;
struct Edge{
	int u,v,next;
}e[MAXN];
inline void addedge(int u,int v){
	++cnt;
	e[cnt].u=u,e[cnt].v=v,e[cnt].next=head[u];
	head[u]=cnt;
}
inline void init(){
	for (int i = 1;i <= 100001; i ++){
		head[i]=ts[i]=in[i]=e[i].u=e[i].v=e[i].next=0;
	}
}
inline void toposort(){
	priority_queue <int> q;
	for (int i = 1;i <= n; i ++){
		if (!in[i]){
			q.push(i);
		}
	}
	cnt=0;
	while (!q.empty()){
		int u=q.top();
		q.pop();
		for (int i = head[u]; i ; i = e[i].next){
			int v=e[i].v;
			if (!--in[v]){
				q.push(v);
			}
		}
		ts[++cnt]=u;
	}
	if (cnt<n) puts("Impossible!");
	else {
		for (int i = n; i >= 1; i --) printf ("%d ",ts[i]);
		cout <<'\n';
	}
	return;
}
int main(){
	cin >>t;
	int u,v;
	while (t--){
		init();
		scanf ("%d%d",&n,&m);
		for (int i = 1;i <= m; i ++){
			scanf ("%d%d",&u,&v);
			in[u]++;
			addedge(v,u);
		}
		toposort();
	}
	return 0;
}
2024/7/22 17:40
加载中...