1 条题解
-
0
数据好水啊,yzc神秘做法能过。
UPD: spj 错了,全输出 -1 能过。
所以这题正解还得是不用 kruscal 的生成树。
#include<bits/stdc++.h> using namespace std; const int N=2e5+10; vector<int>G[N],G2[N];int rd[N],pre[N],v[N],s[N]; struct node{int x,y,c;}e[N];map<pair<int,int>,int>mp; void dfs(int x) { s[x]=rd[x]; for(int y:G2[x]) { dfs(y); s[x]^=s[y]; } } signed main() { int n,m;cin>>n>>m; for(int i=1;i<=m;i++) { int x,y;cin>>x>>y; e[i]={x,y,0}; G[x].push_back(y); G[y].push_back(x); rd[x]^=1; mp[{x,y}]=mp[{y,x}]=i; } if(m&1) { cout<<-1; return 0; } deque<int>q;q.push_back(1);v[1]=1; while(!q.empty()) { int x=q.front();q.pop_front(); for(int y:G[x])if(!v[y]) { G2[x].push_back(y); q.push_back(y);v[y]=1;pre[y]=x; } } dfs(1); for(int i=2;i<=n;i++) { int id=mp[{pre[i],i}]; if(s[i])e[id].c^=1; } for(int i=1;i<=m;i++) { if(e[i].c)cout<<e[i].y<<' '<<e[i].x<<'\n'; else cout<<e[i].x<<' '<<e[i].y<<'\n'; } return 0; }
- 1
信息
- ID
- 8597
- 时间
- 2000ms
- 内存
- 1024MiB
- 难度
- 10
- 标签
- 递交数
- 8
- 已通过
- 2
- 上传者