为什么这样写为被自环卡掉 应该是线性才对
#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int typ,n,m,in[N],out[N],deg[N],vis[N*2];
struct graph{
int v,id,anti;
};
int operator<(graph x,graph y){
return 1;
}
set<graph>g[N];
vector<int>ans;
int dfs(int u,int typ){
for(auto [v,id,anti]:g[u]){
if(!vis[id]){
vis[id]=1,g[u].erase({v,id,anti});
if(typ==1){
int tmp=anti;
if(!tmp){
tmp=-1;
}
else{
tmp=0;
}
g[v].erase({u,id,tmp});
}
dfs(v,typ);
if(typ==1){
if(anti==-1){
ans.push_back(-id);
}
else{
ans.push_back(id);
}
}
else{
ans.push_back(id);
}
}
}
}
int main(){
cin>>typ>>n>>m;
if(typ==1){//无向图
for(int i=1,u,v;i<=m;i++){
cin>>u>>v,deg[u]++,deg[v]++,g[u].insert({v,i,0}),g[v].insert({u,i,-1});
}
for(int i=1;i<=n;i++){
if(deg[i]%2){
cout<<"NO\n";
return 0;
}
}
}
else{
for(int i=1,u,v;i<=m;i++){
cin>>u>>v,in[v]++,out[u]++,g[u].insert({v,i,0});
}
for(int i=1;i<=n;i++){
if(in[i]!=out[i]){
cout<<"NO\n";
return 0;
}
}
}
for(int i=1;i<=n;i++){
if(g[i].size()){
dfs(i,typ);
if(ans.size()!=m){
cout<<"NO\n";
return 0;
}
cout<<"YES\n";
reverse(ans.begin(),ans.end());
for(int i:ans){
cout<<i<<" ";
}
return 0;
}
}
if(n==1){
cout<<"YES\n";
}
else{
cout<<"NO\n";
}
}