1320. Graph Decomposition

http://acm.timus.ru/problem.aspx?space=1&num=1320

ural 的题目倒是挺好的 不过题意一直让人匪夷所思呀  很难懂

题意:给一个图 依次从里面拿走两个相邻的边 问可不可以最后全拿完

并查集 很巧妙 我承认我看了解题报告 自己思维还是不够呀

每个连同块 里面边的个数是偶数就可以 奇数就不可以

代码:

#include<iostream>

#include<cstdio>

#include<cstring>

#include<algorithm>

#include<string>

#include<vector>

#include<map>

#include<queue>

#include<stack>

#include<cmath>

#define LL long long

//#pragma comment(linker, "/STACK:1024000000,1024000000")

using namespace std;



const int INF=0x3f3f3f3f;

const int N=1005;

int f[N];

int num[N];

int findx(int x)

{

    if(f[x]!=x)

    f[x]=findx(f[x]);

    return f[x];

}

int main()

{

   // freopen("data.txt","r",stdin);

    for(int i=1;i<N;++i)

    {f[i]=i;num[i]=0;}

    int l,r;

    while(cin>>l>>r)

    {

        int fl=findx(l);

        int fr=findx(r);

        if(fl==fr)

        {++num[fr];continue;}

        num[fr]+=num[fl]+1;

        f[fl]=fr;

    }

    for(int i=1;i<N;++i)

    {

        if(f[i]==i&&num[i]%2)

        {cout<<"0"<<endl;return 0;}

    }

    cout<<"1"<<endl;

    return 0;

}

 

你可能感兴趣的:(position)