这两份代码有什么不同?
  • 板块学术版
  • 楼主EricWan
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/10/13 19:18
  • 上次更新2023/11/2 14:05:40
查看原帖
这两份代码有什么不同?
377873
EricWan楼主2023/10/13 19:18

对于水题的疑问可能放在学术版不合适?

题意:给出一个每个节点的度均为偶数的连通无向图,找到字典序最小的一笔画方式。

一个 AC:

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, x, y, st[100005], cnt;
bool vis[50005];
vector<pair<int,int> > v[50005];
void dfs(int id)
{
	for (pair<int,int> i : v[id])
	{
		if (vis[i.second])
		{
			continue;
		}
		vis[i.second] = 1;
		cnt++;
		dfs(i.first);
	}
	st[++st[0]] = id; // 放后面
}
signed main()
{
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
	{
		cin >> x >> y;
		v[x].emplace_back(y,i);
		v[y].emplace_back(x,i);
	}
	for (int i = 1; i <= n; i++)
	{
		sort(v[i].begin(), v[i].end());
	}
	dfs(1);
	for (int i = st[0]; i >= 1; i--) // 当然,输出也要反向
	{
		cout << st[i] << " ";
	}
	return 0;
}

这个是 WA(但不全 WA,小样例能过):

#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, x, y, st[100005], cnt;
bool vis[50005];
vector<pair<int,int> > v[50005];
void dfs(int id)
{
	st[++st[0]] = id; // 放前面
	for (pair<int,int> i : v[id])
	{
		if (vis[i.second])
		{
			continue;
		}
		vis[i.second] = 1;
		cnt++;
		dfs(i.first);
	}
}
signed main()
{
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
	{
		cin >> x >> y;
		v[x].emplace_back(y,i);
		v[y].emplace_back(x,i);
	}
	for (int i = 1; i <= n; i++)
	{
		sort(v[i].begin(), v[i].end());
	}
	dfs(1);
	for (int i = 1; i <= st[0]; i++) // 正向输出
	{
		cout << st[i] << " ";
	}
	return 0;
}

求 hack!

2023/10/13 19:18
加载中...