Codeforces Round #656 (Div. 3) E. Directing Edges (拓扑排序)

题目链接:https://codeforces.ml/contest/1385/problem/E

题解:首先将有向边和无向边分开存,若已存在的有向边(判断一个有向图是否存在环用拓扑排序)已经存在环则输出NO,否则一定有解,无向边方向的判断可以根据拓扑排序的先后次序,次序在前的指向次序在后的。

代码:

#include
using namespace std;
typedef long long ll;
const int maxn=2e5+10;
int n,m;
vector e[maxn];
vector >e1;
queue q;
int t[maxn],indeg[maxn];
void init(){
	memset(t,0,sizeof(t));
	memset(indeg,0,sizeof(indeg));
	for(int i=1;i<=n;i++) e[i].clear();
	e1.clear();
} 
bool topsort(){
	while(!q.empty()) q.pop();
	int tt=0,num=0;
	for(int i=1;i<=n;i++){
		if(indeg[i]==0) q.push(i);
	}
	while(!q.empty()){
		int u=q.front();q.pop();num++;t[u]=tt,tt++;
		for(int i=0;i>T;
	while(T--){
		scanf("%d%d",&n,&m);
		init();
		for(int i=0;i

 

你可能感兴趣的:(数据结构,codeforces)