#10109. 「一本通 3.7 练习 3」John's Trip

 

 题解:

题意比较绕,写出模型

街是边,路口是点,

自环在DFS里无所谓(重边也无所谓)

然后显然是个欧拉回路 ,(走过所有边回到起点)

然后图保证联通,只要判断能不能构成欧拉回路就行了

然后发现LOJ居然没pe,pe是直接wa,难受啊马飞

#include<bits/stdc++.h>
#define fi first
#define se second
#define io std::ios::sync_with_stdio(false)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int P = 1e9+7, INF = 0x3f3f3f3f;
const int maxn=2000;
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll qpow(ll a,ll n){ll r=1%P;for (a%=P; n; a=a*a%P,n>>=1)if(n&1)r=r*a%P;return r;}
int _next[maxn*2],head[maxn],tot,to[maxn*2];
int id[maxn*2];
void add(int x,int y,int z)
{
    _next[++tot]=head[x],head[x]=tot,to[tot]=y,id[tot]=z;
    //_next[++tot]=head[y],head[y]=tot,to[tot]=x;
}
int cnt;
int ans[maxn];
int vis[maxn];
void dfs(int u)
{
    for(int &i=head[u];i;i=_next[i])
    {

        int v=to[i];
        int dd=id[i];
        if(!vis[dd])
        {
            vis[dd]++;
            dfs(v);
            ans[cnt++]=dd;
        }
    }
}
int in[maxn];
int flag=0;
int main()
{
    int s;
    int num=0;
    int x,y,z;
    while(cin>>x>>y)
    {
        if(!x&&!y)
        {   if(num==0)
            break;
            dfs(s);
            for(int i=1;i<=44;i++)
            {

                if(in[i]%2==1)
                {
                    flag=1;
                    break;
                }
            }
            if(flag)
            cout<<"Round trip does not exist."<<endl;
            else
            {
            for(int i=0;i<cnt;i++)
            {

            cout<<ans[i];
            if(i!=cnt-1)
                cout<<' ';
            }
            cout<<endl;
            }
            for(int i=1;i<=50;i++)
            {
                head[i]=0;
                in[i]=0;
            }
            memset(vis,0,sizeof(vis));
            cnt=0;
            tot=0;
            num=0;
            flag=0;
            continue;
        }
        cin>>z;
        add(x,y,z);
        add(y,x,z);
        in[x]++;
        in[y]++;
        num++;
        if(num==1)
        s=min(x,y);
    }
}

 

posted @ 2020-09-22 18:09  摸鱼选手LLF  阅读(177)  评论(0编辑  收藏  举报