标签:
题目链接: 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