求调,玄2关
查看原帖
求调,玄2关
935976
Amoribus楼主2025/2/5 11:00

WA on test 2

#include<bits/stdc++.h>
using namespace std;
vector<int> v[200009]; 
int ind[200009];
int a[200009],sz;
int id[200009];
pair<int,int> und[200009];
int cnt;
stack<int> q;
int T,n,m;
void init(){
	while(!q.empty()) q.pop();
	memset(und,0,sizeof(und));
	memset(a,0,sizeof(a));
	for(int i=1;i<=n;i++){
		v[i].clear();
	}
	memset(id,0,sizeof(id));
	memset(ind,0,sizeof(ind));
	sz=cnt=0;
}
int main()
{
	cin>>T;
	while(T--){
		init(); 
		cin>>n>>m;
		for(int i=1;i<=m;i++){
			int op,x,y;
			cin>>op>>x>>y;
			if(op==1){
				v[x].push_back(y);
				ind[y]++;
			}
			else{
				++cnt;
				und[cnt].first=x;
				und[cnt].second=y;
				
			}
		}
		for(int i=1;i<=n;i++){
			if(ind[i]==0) q.push(i);
		}
		while(!q.empty()){
			int now=q.top();
			q.pop();
			a[++sz]=now;
			id[now]=sz;
			for(int i=0;i<v[now].size();i++){
				int to=v[now][i];
				ind[to]--;
				if(ind[to]==0) q.push(to);
			}
		}		
		if(sz<n){
			cout<<"NO"<<endl;
			continue;	
		}
		else cout<<"YES"<<endl;
		for(int i=1;i<=n;i++){
			int uu=und[i].first,vv=und[i].second;
			if(id[uu]<id[vv]){
				v[uu].push_back(vv);
			}
			else v[vv].push_back(uu);
		}
		for(int i=1;i<=n;i++){
			for(int y:v[i]){
				cout<<i<<" "<<y<<endl;
			}
		}
	} 

	return 0;
} 
2025/2/5 11:00
加载中...