社区讨论
关于欧拉路
学术版参与者 3已保存回复 7
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 7 条
- 当前快照
- 1 份
- 快照标识符
- @mi4hde9d
- 此快照首次捕获于
- 2025/11/18 19:18 3 个月前
- 此快照最后确认于
- 2025/11/20 04:05 3 个月前
rt,昨天刚学欧拉路,AC 了模板,现在想知道如果在 P7771 的基础上将有向图改为无向图,那么下面的代码该怎么改。
CPP#include<bits/stdc++.h>
using namespace std;
int n,m,d[200010],ru[200010],chu[200010];
stack<int>st;
vector<int>e[200010];
void DFS(int x){
int le = e[x].size();
for(int i = d[x];i<le;i = d[x]){
d[x] = i+1;
DFS(e[x][i]);
}
st.push(x);
}
int main(){
cin.tie(0)->sync_with_stdio(0);
cout.tie(0);
cin>>n>>m;
int u,v;
for(int i = 1;i<=m;i++){
cin>>u>>v;
e[u].push_back(v);
ru[v]++;
chu[u]++;
}
for(int i = 1;i<=n;i++)sort(e[i].begin(),e[i].end());
int be = 1,f1 = 0,f2 = 0;
bool f = 0;
for(int i = 1;i<=n;i++){
if(ru[i]!=chu[i]){
f = 1;
if(ru[i]-chu[i]==1)f1++;
else if(ru[i]-chu[i]==-1)f2++,be = i;
else{
cout<<"No";
return 0;
}
}
}
if(f&&!(f1==f2&&f2)){
cout<<"No";
return 0;
}
else if(f1>1||f2>1){
cout<<"No";
return 0;
}
DFS(be);
while(!st.empty()){
cout<<st.top()<<' ';
st.pop();
}
return 0;
}
回复
共 7 条回复,欢迎继续交流。
正在加载回复...