【CodeForces 504A】Misha and Forest
2016-02-14 23:28
323 查看
题
把相连点为1的i存进队列,i的唯一相连点就是S。
然后得到一条边i到s,对i的相连点S,d--,s^=i,就相当于去掉i这个点。
然后再判断S的相连点d是不是1,是1则进入队列。
直到队列为空。
题意
有n个点,代号分别为0到n-1,然后这n个点有d个相连点,相连点的XOR sum 为s,求所有的边。分析
知识:a^b^a=b,a^b^b=a.把相连点为1的i存进队列,i的唯一相连点就是S。
然后得到一条边i到s,对i的相连点S,d--,s^=i,就相当于去掉i这个点。
然后再判断S的相连点d是不是1,是1则进入队列。
直到队列为空。
代码
#include<cstdio> #include<algorithm> #include<queue> #define N 100005 using namespace std; int n,b; int ex ,ey ,d ,s ; queue<int> q; int main() { scanf("%d",&n); for(int i=0; i<n; i++) { scanf("%d%d",&d[i],&s[i]); if(d[i]==1)q.push(i); } while(!q.empty()) { int i=q.front(); q.pop(); if(d[i]==1) { ex[b]=i; ey[b]=s[i]; b++; s[s[i]]^=i; d[s[i]]--; if(d[s[i]]==1) q.push(s[i]); } } printf("%d\n",b); for(int i=0; i<b; i++) printf("%d %d\n",ex[i],ey[i]); return 0; }
相关文章推荐
- iPhone修改时间变砖
- iPhone修改时间变砖
- CSU 1556 Pseudoprime numbers
- 报错:Conversion to Dalvik format failed: Unable to execute dex:
- POJ 3252 Round Numbers(数位dp&记忆化搜索)
- NSString常用方法
- 三分钟玩转jQuery.noConflict()
- IP地址的分类
- ADO.Net
- [算法]求最短通路值
- dict
- Linux 学习树之基础20160214
- excle .net
- POJ 2352 线段树(单点更新)
- YTU 2402: Common Subsequence
- Coderforce 626C Block Towers(脑洞啊)
- leetcode 34. Search for a Range
- 电脑绣花打版软件评比 《下》
- BZOJ 2510 弱题 概率 矩阵乘法 循环矩阵
- 电脑绣花打版软件评比(中)