Description
给定n个点,m条边的无向图(无自环),可以从图中删除一条边,问删除哪些边可以使图变成一个二分图。
Input
第1行包含两个整数n,m,分别表示点数和边数。
第2~m+1行每行两个数x,y,表示有一条边连接点x,y。
Output
第一行两个整数,表示能删除的边的个数。
接下来一行按照从小到大的顺序输出能删除的边的编号。
Solution
这题的弱化版:https://blog.csdn.net/tylon2006/article/details/100556029
简直就是无脑CDQ,直接加边。。。
Code
#include<bits/stdc++.h>
using namespace std;
int f[2000010],siz[2000010],col[2000010],top,cnt,res,n,m;
int edge[2000010][2];
bool ans[2000010];
struct data{
int u,v,fau,fav,colu,colv,sizu,sizv;
}stk[2000010],tmp;
int find(int x){
if(x!=f[x]) return find(f[x]);
return x;
}
int findcol(int x){
if(x==f[x]) return 0;
return col[x]^findcol(f[x]);
}
bool</