码迷,mamicode.com
首页 > 其他好文 > 详细

codeforces #285 div.2 C. Misha and Forest

时间:2015-01-15 09:31:43      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

技术分享

题目链接:    http://codeforces.com/contest/501/problem/C


题意:    给出图的每个顶点的度数和相邻顶点的异或值的和,求出这个图的边的情况和边的数目:

分析:   找出度为一的点,其所对应的异或值即为与之相邻的顶点(<- ^ ->),再将与之相邻顶点的度数减一:



**********代码:

#include<iostream>
#include<cstdio>
#include<cstring>
#include<vector>
#include<queue>
using namespace std;

const int maxn=1<<16+5;
int du[maxn],ytot[maxn];
vector< pair<int ,int > > V;

int main()
{
    int n,u,v;
    int i;
    while(scanf("%d",&n)!=EOF)
    {
         queue<int> Q;
         for(i=0;i<n;i++)
            V.clear();
         for(i=0;i<n;i++)
            scanf("%d%d",&du[i],&ytot[i]);
         for(i=0;i<n;i++)
            if(du[i]==1)   Q.push(i);
         while(!Q.empty())
            {
               u=Q.front();
               Q.pop();
               if(du[u]!=1) continue;
                 v=ytot[u];
                V.push_back(make_pair(u,v));
                du[v]--;
                 ytot[v]^=u;
                if( du[v]==1) Q.push(v);
            }
            printf("%d\n",V.size());
            for(i=0;i<V.size();i++)
                printf("%d %d\n",V[i].first,V[i].second);
    }
    return 0;
}





codeforces #285 div.2 C. Misha and Forest

标签:

原文地址:http://blog.csdn.net/u013514722/article/details/42716625

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!