1 条题解

  • 0
    @ 2026-2-9 20:59:34
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int t,n,m;
    struct N{
    	int y,id;
    }; 
    vector<N> e[200010];
    vector<int> av,ae;
    int now[200010],in[200010],out[200010];
    void dfs(int x){
    	for(int i=now[x];i<e[x].size();i=now[x]){
    		int y=e[x][i].y,id=e[x][i].id;
    		now[x]=i+1;
    		dfs(y);
    		av.push_back(y);
    		ae.push_back(id);
    	}
    }
    int main(){
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	cin>>t;
    	while(t--){
    		cin>>n>>m;
    		for(int i=1;i<=n;i++)in[i]=out[i]=0,now[i]=0,e[i].clear();
    		for(int i=1,x,y;i<=m;i++){
    			cin>>x>>y;
    			x++;y++;
    			e[x].push_back({y,i});
    			out[x]++;
    			in[y]++;
    		}
    		int st=1,fl=1,c1=0,c2=0;
    		for(int i=1;i<=n;i++){
    			if(out[i]&&!c2)st=i;
    			if(in[i]!=out[i]){
    				fl=0;
    				if(in[i]-out[i]==1)c1++;
    				else if(out[i]-in[i]==1)c2++,st=i;
    				else{
    					c1=114514;
    					break;
    				}
    			}
    		}
    		if(!fl&&(c1!=1||c2!=1)){
    			cout<<"No\n";
    			continue;
    		}
    		av.clear();
    		ae.clear();
    		dfs(st);
    		av.push_back(st);
    		reverse(av.begin(),av.end());
    		reverse(ae.begin(),ae.end());
    		if(ae.size()!=m){
    			cout<<"No\n";
    			continue;
    		}
    		cout<<"Yes\n";
    		for(int i:av)cout<<i-1<<" ";
    		cout<<'\n';
    		for(int i:ae)cout<<i-1<<' ';
    		cout<<'\n'; 
    	}
    	return 0;
    }
    
    
    • 1

    有向图欧拉迹(Eulerian Trail (Directed))

    信息

    ID
    8169
    时间
    500ms
    内存
    1024MiB
    难度
    9
    标签
    递交数
    11
    已通过
    4
    上传者