dbycs11 @ 2024-02-28 10:22:08
提交记录 可以看到,第一个点错了,但如果各位大佬把本辣鸡的代码把第一个点跑一边,就会发现输出和答案一样,但洛谷却判了个wa,就非常神奇,请各位大佬帮本辣鸡找找问题。
代码:
#include<iostream>
#include<cstdio>
using namespace std;
const bool T=true,F=!T;
const int MAXN=500+10;
static int g[MAXN][MAXN],a[MAXN];
int n,m,ans,tot;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*f;
}
void Dfs(int x)
{
for(int i=1;i<=n;i++)
{
if(g[x][i]>=1)
{
g[x][i]--;g[i][x]--;
Dfs(i);
}
}
a[++tot]=x;
}
signed main()
{
m=read();
for(int i=1;i<=m;i++)
{
int u=read(),v=read();
g[u][v]++;g[v][u]++;
a[u]++;a[v]++;
n=max(n,max(u,v));
}
int x;
for(int i=1;i<=n;i++)
if(a[i]%2)
{
x=i;break;
}
for(int i=1;i<=n;i++)a[i]=0;
Dfs(x);
for(int i=tot;i>=1;i--)
cout<<a[i]<<"\n";
return 0;
}
第一个点: IN:3 1 2 2 3 3 1 ANS:1 2 3 1
by Fimlty @ 2024-02-28 10:41:01
兄弟,x赋个初始值就行了
by naijgnorgnahz @ 2024-02-28 10:41:07
@duanboyuan1 把 O2 关上再交试试
by Fimlty @ 2024-02-28 10:41:36
#include<iostream>
#include<cstdio>
using namespace std;
const bool T=true,F=!T;
const int MAXN=500+10;
static int g[MAXN][MAXN],a[MAXN];
int n,m,ans,tot;
inline int read()
{
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){x=(x<<3)+(x<<1)+(ch^48);ch=getchar();}
return x*f;
}
void Dfs(int x)
{
for(int i=1;i<=n;i++)
{
if(g[x][i]>=1)
{
g[x][i]--;g[i][x]--;
Dfs(i);
}
}
a[++tot]=x;
}
signed main()
{
m=read();
for(int i=1;i<=m;i++)
{
int u=read(),v=read();
g[u][v]++;g[v][u]++;
a[u]++;a[v]++;
n=max(n,max(u,v));
}
int x = 1;
for(int i=1;i<=n;i++)
if(a[i]%2)
{
x=i;break;
}
for(int i=1;i<=n;i++)a[i]=0;
Dfs(x);
for(int i=tot;i>=1;i--)
cout<<a[i]<<"\n";
return 0;
}
by Fimlty @ 2024-02-28 10:41:51
@duanboyuan1
by Fimlty @ 2024-02-28 10:42:55
原因是这样的,欧拉路径特殊情况下没有奇数入度的点,这时候随便哪个点做起点都可以。
by Fimlty @ 2024-02-28 10:44:13
当然,为了字典序最小,那你就从1开始走吧
by Fimlty @ 2024-02-28 10:46:35
怎么不赋初始值也能得88pts啊(((
by Huangwenqi @ 2024-03-02 19:25:47
哈哈哈,你没初始化x!