树上差分的代码很简洁,dfs+差分即可

这题很多坑点啊,比如重边自环好坑

 #include<cstdio>
#include<cstdlib>
#include<algorithm>
#include<cstring>
#include<vector>
#define pii pair<int,int>
#define pb push_back
#define mp make_pair
#define ft first
#define sc second
#define MAXN 1000000+10
using namespace std;
int first[MAXN],edges[MAXN<<],nxt[MAXN<<],to[MAXN<<];
int n,m,c=-;
int b[MAXN],d[MAXN],tag[MAXN];
int tmp,cnt,self_tmp;
void insert(int x,int y,int e){
nxt[++c]=first[x],first[x]=c,to[c]=y,edges[c]=e;
nxt[++c]=first[y],first[y]=c,to[c]=x,edges[c]=e;
}
void init(){
scanf("%d%d",&n,&m);
int x,y;
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
if(x==y&&!self_tmp){self_tmp=i;continue;}
if(x==y){self_tmp=-;continue;}
insert(x,y,i);
}
}
void dfs(int x,int fa){
for(int e=first[x];e;e=nxt[e]){
if(e==(fa^))continue;
int &y=to[e];
if(d[y]){
if(d[x]<d[y])continue;
if((d[x]-d[y]+)&){
tag[x]++,tag[y]--;
cnt++;tmp=edges[e];
}
else{
tag[x]--,tag[y]++;
}
}
else{
d[y]=d[x]+;
dfs(y,e);
tag[x]+=tag[y];
}
}
}
vector<int> ans;
void find(int x){
b[x]=;
for(int e=first[x];e;e=nxt[e]){
int &y=to[e];
if(b[y])continue;
if(tag[y]==cnt){
ans.pb(edges[e]);
}
find(y);
}
}
void solve(){
if(-==self_tmp){printf("0\n");return;}
for(int i=;i<=n;i++){
if(!d[i])d[i]=,dfs(i,);
}
if(!cnt){
if(self_tmp){printf("1\n%d\n",self_tmp);}
else{printf("%d\n",m);for(int i=;i<m;i++)printf("%d ",i);printf("%d\n",m);}
return;
}
if(self_tmp){printf("0\n");return;}
for(int i=;i<=n;i++){
if(!b[i])find(i);
}
if(cnt==)ans.pb(tmp);
sort(ans.begin(),ans.end());
printf("%d\n",ans.size());
for(int i=;i<ans.size();i++){
printf("%d",ans[i]);
if(i==ans.size()-)printf("\n");
else printf(" ");
}
}
int main()
{
// freopen("data.in","r",stdin);
// freopen("my.out","w",stdout);
init();
solve();
return ;
}

BZOJ4424: Cf19E Fairy的更多相关文章

  1. bzoj千题计划229:bzoj4424: Cf19E Fairy

    http://www.lydsy.com/JudgeOnline/problem.php?id=4424 图是二分图的条件:没有奇环 所以,如果图不存在奇环,删除任意一条边都可以 如果存在奇环, 对于 ...

  2. BZOJ4424/CF19E Fairy(dfs树+树上差分)

    即删除一条边使图中不存在奇环.如果本身就是个二分图当然任意一条边都可以,先check一下.否则肯定要删除在所有奇环的交上的边. 考虑怎么找这些边.跑一遍dfs造出dfs树,找出返祖边构成的奇环.可以通 ...

  3. 【BZOJ4424】Cf19E Fairy DFS树

    [BZOJ4424]Cf19E Fairy Description 给定 n 个点,m 条边的无向图,可以从图中删除一条边,问删除哪些边可以使图变成一个二分图. Input 第 1 行包含两个整数 n ...

  4. BZOJ-4424 &&CodeForces-19E Fairy DP+dfs (Link-Cut-Tree可A)

    Va爷的胡策题T2 E. Fairy time limit per test1.5 seconds memory limit per test256 megabytes inputstandard i ...

  5. cf19E. Fairy(奇环 二分图染色)

    题意 题目链接 Sol 非常有思维含量的一道题,队爷的论文里介绍了一种\(N \sqrt{N}\)的暴力然鹅看不懂.. 看了一下clj的\(O(nlogn)\)的题解,又翻了翻题交记录,发现\(O(n ...

  6. [CF19E]Fairy

    给定一张n个点m条边的无向图,求删除哪一条边后,能够确保构成一个二分图,输出所有可能 解法:我们知道二分图的性质是没有奇环,这道题我们也应该从这个方面入手来考虑. 如果没有奇环的话我们当然想怎么删就怎 ...

  7. bzoj 4424: Cf19E Fairy && codeforces 19E. Fairy【树形dp】

    参考:https://blog.csdn.net/heheda_is_an_oier/article/details/51131641 这个找奇偶环的dp1真是巧妙,感觉像tarjan一样 首先分情况 ...

  8. CF19E Fairy(树上差分)

    题目描述 很久很久以前,有一个仙女叫做A.有一天一个少年B找到她,并且请求她预测他的未来.仙女看着她的水晶球,说这位少年不久将遇见世界上最美丽的公主,并且将迎娶她为妻.然后仙女在一张纸上画了n个点,并 ...

  9. HGOI20180817 (NOIP模拟Day1 task)

    HGOI自测 初测:150=80+20+50 rank1~rank3(并列3个rank1,所以我是rank3 qwq) 今日分突然想简约 CF359A Table https://www.luogu. ...

随机推荐

  1. 201621123062《java程序设计》第二周学习总结

    1.本周学习总结 本周学习重点: 1.java的基本数据类型(类似于C,特有boolean),java的引用类型(类似指针),其他常用类. 2.字符串类型String(比c简单),String的不变性 ...

  2. jwt验证登录信息

    为什么要告别session?有这样一个场景,系统的数据量达到千万级,需要几台服务器部署,当一个用户在其中一台服务器登录后,用session保存其登录信息,其他服务器怎么知道该用户登录了?(单点登录), ...

  3. Java 多线程 从无到有

    个人总结:望对屏幕对面的您有所帮助 一. 线程概述 进程: 有独立的内存控件和系统资源 应用程序的执行实例 启动当前电脑任务管理器:taskmgr 进程是程序(任务)的执行过程,它持有资源(共享内存, ...

  4. python __str__ 和__repr__方法

    看下面的例子就明白了 class Test(object): def __init__(self, value='hello, world!'): self.data = value >> ...

  5. 访问器属性:setter()函数和getter()函数

    1.干嘛用的? getter()函数:返回有效的值 setter()函数:调用它并传入数据,这个函数决定如何处理数据 2.具备哪些属性?如何定义? configurable(默认为true),enum ...

  6. Django admin 中抛出 'WSGIRequest' object has no attribute 'user'的错误

    这是Django版本的问题,1.9之前,中间件的key为MIDDLEWARE_CLASSES, 1.9之后,为MIDDLEWARE.所以在开发环境和其他环境的版本不一致时,要特别小心,会有坑. 将se ...

  7. 表单中各种input汇总

    html表单 表单用于搜集不同类型的用户输入,表单由不同类型的标签组成,相关标签及属性用法如下: 1.<form>标签 定义整体的表单区域 action属性 定义表单数据提交地址 meth ...

  8. 理解Node.js安装及模块化

    1.安装Node Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境. Node.js 使用了一个事件驱动.非阻塞式 I/O 的模型,使其轻量又高效. Node.j ...

  9. Codeforces Round #441 (Div. 2, by Moscow Team Olympiad) A. Trip For Meal

    http://codeforces.com/contest/876/problem/A 题意: 一个人一天要吃n次蜂蜜,他有3个朋友,他第一次总是在一个固定的朋友家吃蜂蜜,如果说没有吃到n次,那么他就 ...

  10. IndentationError : expected an indented block

    IndentationError:在python的条件语句出现 expected an indented block问题 是指缩进问题,比如for循环里面的print前面需要四个空格. Python语 ...