题目:http://codeforces.com/contest/19/problem/E

去掉一条边,使无向图变成二分图。

该边应该被所有奇环经过,且不被偶环经过。

  因为一条非树边一定只在一个环里。所以一条既被所有奇环经过又被偶环经过的边是树边。如果把它去掉,将无法处理包含它的那个偶环的非树边和包含它的某个奇环的非树边加上两段树边所构成的奇环。

找这样的边,弄一个边上的树上差分就行了。

可以模仿kruscal用并查集弄一个生成树。不过dfs其实也行。

注意图可能不连通。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e4+;
int n,m,c[N][],fa[N],head[N],t[N<<],next[N<<],tot;
int hd[N],xnt,col[N],cnt,pa[N],prbh,bh[N<<],q[N],qnt;
bool vis[N];
struct Ed{
int nxt,to,bh;Ed(int n=,int t=,int b=):nxt(n),to(t),bh(b) {}
}ed[N<<];
int find(int a){return fa[a]==a?a:fa[a]=find(fa[a]);}
void add(int x,int y,int b)
{
ed[++xnt]=Ed(hd[x],y,b);hd[x]=xnt;
ed[++xnt]=Ed(hd[y],x,b);hd[y]=xnt;
}
void dfs(int cr,int f)
{
vis[cr]=;
for(int i=head[cr],v;i;i=next[i])
if(col[v=t[i]])
{
int f0=find(v),d=(col[cr]==col[v]);
if(d){cnt++;if(cnt==)prbh=bh[i];}
c[cr][d]++;c[v][d]++;c[f0][d]-=;
}
for(int i=hd[cr];i;i=ed[i].nxt)
if(ed[i].to!=f)
{
col[ed[i].to]=-col[cr];dfs(ed[i].to,cr);
}
fa[cr]=f;
}
void dfsx(int cr,int f,int eb)
{
vis[cr]=;
for(int i=hd[cr],v;i;i=ed[i].nxt)
if((v=ed[i].to)!=f)
{
dfsx(v,cr,ed[i].bh);
c[cr][]+=c[v][];c[cr][]+=c[v][];
}
if(c[cr][]==cnt&&!c[cr][])q[++qnt]=eb;
}
int main()
{
scanf("%d%d",&n,&m);int x,y;
for(int i=;i<=n;i++)fa[i]=i;
for(int i=;i<=m;i++)
{
scanf("%d%d",&x,&y);
if(find(x)!=find(y))
{
add(x,y,i);
fa[find(x)]=find(y);
}
else{
t[++tot]=y;next[tot]=head[x];head[x]=tot;bh[tot]=i;
t[++tot]=x;next[tot]=head[y];head[y]=tot;bh[tot]=i;
}
}
for(int i=;i<=n;i++)fa[i]=i;
for(int i=;i<=n;i++) if(!vis[i])
col[i]=,dfs(i,);
if(!cnt)
{
printf("%d\n",m);
for(int i=;i<=m;i++)printf("%d ",i);return ;
}
if(cnt==)q[++qnt]=prbh;
memset(vis,,sizeof vis);
for(int i=;i<=n;i++) if(!vis[i])dfsx(i,,);
sort(q+,q+qnt+);
printf("%d\n",qnt);
for(int i=;i<=qnt;i++)printf("%d ",q[i]);
return ;
}

CF 19E Fairy——树上差分的更多相关文章

  1. CF19 E Fairy——树上差分

    题目:http://codeforces.com/contest/19/problem/E 先把图连成一棵树,然后对于每条非树边,判断它是在奇环中还是偶环中: 把环上的点打上相应的差分标记,并记录有多 ...

  2. CF19E Fairy(树上差分)

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

  3. 【Cf #292 D】Drazil and Morning Exercise(树的直径,树上差分)

    有一个经典的问题存在于这个子问题里,就是求出每个点到其他点的最远距离. 这个问题和树的直径有很大的关系,因为事实上距离每个点最远的点一定是直径的两个端点.所以我们可以很容易地进行$3$遍$Dfs$就可 ...

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

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

  5. 暗之的锁链 [COGS2434] [树上差分]

    Description 无向图中有N个节点和两类边,一类边被称为主要边,而另一类被称为附加边.Dark有N – 1条主要边,并且Dark的任意两个节点之间都存在一条只由主要边构成的路径.另外,Dark ...

  6. D6差分及树上差分

    原谅我这篇博客拖了很久才写: 来到学校就和白痴一样缺了一世纪的课 上课特别懵:还有开学考枯了: 差分有列的差分,对于一段区间[l,r]进行修改,显然如果我们对于他的差分数组的l和r+1进行修改就可以了 ...

  7. 【CF739B】Alyona and a tree(树上差分,二分,树形DP)

    题意:给出一棵有根树,树上每个点.每条边都有一个权值. 现在给出“控制”的定义:对一个点u,设点v在其子树上,且dis(u,v)≤av,则称u控制v. 要求求出每个点控制了多少个点 n (1 ≤ n  ...

  8. 洛谷P3258 [JLOI2014]松鼠的新家【LCA+树上差分】

    简要题意 树上n个节点,给定路径,求每个点经过次数 题意分析 对于每两个点,有两种情况,第一种,他们的lca为本身,第二种,他们有公共祖先,又要求他们的点经过次数,暴力是不可能的,复杂度不对,所以可以 ...

  9. luoguP2680 运输计划 题解(二分答案+树上差分)

    P2680 运输计划  题目 这道题如果是看的我的树上差分来的,那么肯定一看题目就可以想到树上差分. 至于这是怎么想到的,一步一步来: 1.n有300000,不可能暴力枚举每一条边 2.因为我们要使运 ...

随机推荐

  1. IPU VPU GPU的关系

    转:https://blog.csdn.net/dragon101788/article/details/78404669 Video graphics system[IPU, VPU and GPU ...

  2. P4501 [ZJOI2018]胖

    题目 P4501 [ZJOI2018]胖 官方口中的送分题 做法 我们通过手玩(脑补),\(a_i\)所作的贡献(能更新的点)为:在\(a_i\)更新\(\forall x\)更新前前没有其他点能把\ ...

  3. 主攻ASP.NET.4.5.1 MVC5.0之重生:根据产品类别显示菜单分类和分页

    路径访问的几种方式和分页效果 显示其它类别的效果和多数据分页效果 默认访问网站路径效果和多数据分页效果 URL路径访问可页面 http://localhost:5339/stationery http ...

  4. Linux下的文件查找命令——find

    Linux下几个常见的文件查找命令: which       查看可执行文件的位置 whereis    寻找特定文件,查看文件的位置 locate       配合数据库查看文件位置 find    ...

  5. php5.6 连接SQL SERVER

    PHP Fatal error: Call to undefined function sqlsrv_connect() in php链接sqlserver出现该错误: 原因是:php5.3 及以上版 ...

  6. 第一章 安装MongoDB

    需要下载 高效开源数据库(mongodb) V3.0.6 官方正式版 安装配置: MongoDB默认的数据目录为:C:\data\db.如果不用默认目录,则需要在在mongod.exe命令后加--db ...

  7. jqgrid的scroll参数的使用

    scroll参数会影响addJSONData(data)方法的使用 存在scroll参数,addJSONData方法会往表格中追加数据: 不存在scroll参数时,addJSONData方法会覆盖表格 ...

  8. MVC 绑定 下拉框数据

    HTML: <div class="form-group col-sm-12"> <div class="col-sm-4"> < ...

  9. QT5中如何使用QFtp类

    QT5中如何使用QFtp类 http://2662597.blog.51cto.com/2652597/1279806 由于QT5对QML的支持有很大的改进,所以打算将原来基于QT4的程序移植到QT5 ...

  10. 【转载】IntelliJ IDEA WEB项目的部署配置

    最近使用了一下IDEA,确实强大.在部署时出现了些问题.看了这篇文章,对ieda的一些部署配置有了些许了解,在此感谢原博.原文链接:http://blog.csdn.net/z69183787/art ...