BZOJ4424: Cf19E Fairy
树上差分的代码很简洁,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的更多相关文章
- bzoj千题计划229:bzoj4424: Cf19E Fairy
		http://www.lydsy.com/JudgeOnline/problem.php?id=4424 图是二分图的条件:没有奇环 所以,如果图不存在奇环,删除任意一条边都可以 如果存在奇环, 对于 ... 
- BZOJ4424/CF19E Fairy(dfs树+树上差分)
		即删除一条边使图中不存在奇环.如果本身就是个二分图当然任意一条边都可以,先check一下.否则肯定要删除在所有奇环的交上的边. 考虑怎么找这些边.跑一遍dfs造出dfs树,找出返祖边构成的奇环.可以通 ... 
- 【BZOJ4424】Cf19E Fairy DFS树
		[BZOJ4424]Cf19E Fairy Description 给定 n 个点,m 条边的无向图,可以从图中删除一条边,问删除哪些边可以使图变成一个二分图. Input 第 1 行包含两个整数 n ... 
- 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 ... 
- cf19E. Fairy(奇环 二分图染色)
		题意 题目链接 Sol 非常有思维含量的一道题,队爷的论文里介绍了一种\(N \sqrt{N}\)的暴力然鹅看不懂.. 看了一下clj的\(O(nlogn)\)的题解,又翻了翻题交记录,发现\(O(n ... 
- [CF19E]Fairy
		给定一张n个点m条边的无向图,求删除哪一条边后,能够确保构成一个二分图,输出所有可能 解法:我们知道二分图的性质是没有奇环,这道题我们也应该从这个方面入手来考虑. 如果没有奇环的话我们当然想怎么删就怎 ... 
- bzoj 4424: Cf19E Fairy && codeforces 19E. Fairy【树形dp】
		参考:https://blog.csdn.net/heheda_is_an_oier/article/details/51131641 这个找奇偶环的dp1真是巧妙,感觉像tarjan一样 首先分情况 ... 
- CF19E Fairy(树上差分)
		题目描述 很久很久以前,有一个仙女叫做A.有一天一个少年B找到她,并且请求她预测他的未来.仙女看着她的水晶球,说这位少年不久将遇见世界上最美丽的公主,并且将迎娶她为妻.然后仙女在一张纸上画了n个点,并 ... 
- HGOI20180817 (NOIP模拟Day1 task)
		HGOI自测 初测:150=80+20+50 rank1~rank3(并列3个rank1,所以我是rank3 qwq) 今日分突然想简约 CF359A Table https://www.luogu. ... 
随机推荐
- bug终结者 团队作业第一周
			bug终结者 团队作业第一周 小组组员及人员分工 小组成员 组长: 20162323 周楠 组员: 20162302 杨京典 20162322 朱娅霖 20162327 王旌含 20162328 蔡文 ... 
- 网络1712--c语言字符数组作业总结..
			---恢复内容开始--- 作业亮点 1.总体情况 1.大部分同学利用了流程图后,对于思路的理解有了提升. 2.很多同学在总结方面写的很不错,能够罗列问题贴出解决问题,我们能够看到你们的进步 2.作业发 ... 
- 利用PCA降维
			参考:<机器学习实战>- Machine Learning in Action 一. 基本思想 PCA(Principal Component Analysis),主成分分析.是目前应用 ... 
- python实现朴素贝叶斯
			参考:<机器学习实战>- Machine Learning in Action 一. 基本思想 简单的说,用概率的高低来决定数据属于哪一类别,这就是贝叶斯决策理论的核心思想,即选择具有最 ... 
- 20162330 实验一 《Java开发环境的熟悉》 实验报告
			2016-2017-2 实验报告目录: 1 2 3 4 5 20162330 实验一 <Java开发环境的熟悉> 实验报告 课程名称:<程序设计与数据结构> 学生班级:1623 ... 
- iOS开发-FFmpeg深入分析
			FFmpeg是相当强大的多媒体编解码框架,在深入分析其源代码之前必须要有基本的多媒体基础知识,否则其源代码会非常晦涩难懂.本文将从介绍一些基本的多媒体只是,主要是为研读ffmpeg源代码做准备,比如一 ... 
- 关于使用栈将一般运算式翻译为后缀表达式并实现三级运算的方法及实例(cpp版)
			#include <iostream> #include <stack> #include <vector> #include <string> #de ... 
- 同一个页面同时拥有collectionView和navigationBar和tabBar时可能遇到的问题
			写一个页面的时候,遇到了页面加载时候collectionView的最下面少了49个像素的位置,切换去别的页面之后,再返回,又变回正常,多方求解无果后,发现原来是系统自带的适应功能导致的,加入以下代码即 ... 
- 同样是IT培训,为什么人家月薪过万,你才几千,问题在哪?!
			听过一句话"360行,行行转IT",虽然有些夸张,但也不难看出IT行业的火爆程度.从李总理提的"互联网+大数据"开始,中国的这场"互联网+" ... 
- LeetCode & Q122-Best Time to Buy and Sell Stock II-Easy
			Description: Say you have an array for which the ith element is the price of a given stock on day i. ... 
