Codeforces Round #285 (Div.1) A Misha and Forest
水题水题水……
题意:给你一些点,给出他们连通了多少个点以及这些点的下标的异或值,让你找出一个图
题解:拓扑排序一发
代码:
#include#include #include #include #include #include #include #include typedef long long ll;typedef unsigned long long ull;using namespace std;const int maxn = pow(2,16)+10;vector >ans;queue q;int d[maxn],v[maxn];bool u[maxn];int n;int main(){#ifndef ONLINE_JUDGE //freopen("F.in","r",stdin); //freopen("F.out","w",stdout);#endif cin >> n; for(ll i =0;i > d[i]>>v[i]; if(d[i]<2) { q.push(i); u[i]=1; } } int t,tt,ttt; while(!q.empty()) { t = q.front(); q.pop(); if(d[t]==0) continue; tt=v[t]; v[tt] ^=t; d[t]--; d[tt]--; ans.push_back(make_pair(t,tt)); if(d[tt]<2 && !u[tt]) { q.push(tt); u[tt]=1; } } cout << ans.size() << endl; for(auto a:ans) { cout << a.first <<" " << a.second << endl; } return 0;}