社区讨论

关于欧拉路

学术版参与者 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 条回复,欢迎继续交流。

正在加载回复...