首页 > 代码库 > Codeforces Round #285 (Div. 2) C - Misha and Forest
Codeforces Round #285 (Div. 2) C - Misha and Forest
思路:类似一个拓扑排序的题,根据 对度数为1的点,它所连的边的编号即为异或和这一 规律,直接进行拓扑排序即可。
每次对得到的节点度数减一,并且异或上他所连的节点。
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<vector> #include<algorithm> #include<queue> using namespace std; typedef long long LL; vector<int> G[66000]; int n,de[66000],sum[66000]; void solve() { queue<int> q; while(!q.empty()) q.pop(); for(int i=0;i<n;i++) if(de[i]==1) q.push(i); while(!q.empty()) { int xo=0; int v=q.front();q.pop(); if(de[v]!=1) continue; int u=sum[v]; sum[u]^=v,de[u]--; if(de[u]==1) q.push(u); printf("%d %d\n",v,u); } } int main() { //freopen("in.txt","r",stdin); int m=0; scanf("%d",&n); for(int i=0;i<n;i++){ scanf("%d%d",&de[i],&sum[i]); m+=de[i]; } printf("%d\n",m/2); solve(); return 0; }
Codeforces Round #285 (Div. 2) C - Misha and Forest
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。