求助
查看原帖
求助
681351
Tobiichi_Origami楼主2022/11/10 19:43
#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帮帮我

2022/11/10 19:43
加载中...