#include<bits/stdc++.h>
#define int long long
using namespace std;
struct edge{
int to,next;
}ed[1000001];
int he[1000001],idx;
struct node{
int u,v,num;
}a[1000001];
bool vis[1000001];
int ans[1000001],cnt;
int d[1000001];
bool cmp(node x,node y){return x.num<y.num;}
void insert(int u,int v)
{
ed[idx].to=v;
ed[idx].next=he[u];
he[u]=idx++;
}
void dfs(int u)
{
for(int i=he[u];~i;i=ed[i].next)
if(!vis[i])
{
vis[i]=vis[i^1]=1;
dfs(ed[i].to);
ans[++cnt]=i/2+1;
}
return ;
}
signed main()
{
while(1)
{
memset(he,-1,sizeof(he));
memset(ed,0,sizeof(ed));
memset(a,0,sizeof(a));
memset(vis,0,sizeof(vis));
memset(ans,0,sizeof(ans));
memset(d,0,sizeof(d));
int m=1,st,n=-1;
cnt=idx=0;
scanf("%d %d",&a[m].u,&a[m].v);
if(!a[m].u&&!a[m].v) return 0;
scanf("%d",&a[m].num);
st=min(a[m].u,a[m].v);
n=max(a[m].u,a[m].v);
d[a[m].u]++;d[a[m].v]++;
m++;
while(scanf("%d %d",&a[m].u,&a[m].v))
{
if(!a[m].u&&!a[m].v) break;
scanf("%d",&a[m].num);
n=max(n,max(a[m].u,a[m].v));
d[a[m].u]++;d[a[m].v]++;
m++;
}
m--;
bool flag=0;
for(int i=1;i<=n;i++)
if(d[i]&1)
{
puts("Round trip does not exist.");
puts(" ");
flag=1;
break;
}
if(flag) continue;
sort(a+1,a+m+1,cmp);
for(int i=1;i<=m;i++)
{
insert(a[i].u,a[i].v);
insert(a[i].v,a[i].u);
}
dfs(st);
for(int i=1;i<=cnt;i++) printf("%d ",ans[i]);
puts(" ");puts(" ");
}
return 0;
}
样例过了,但就是WA,dalao帮帮我