题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5354

题意:求删去每个点后图是否存在奇环(n,m<=1e5)

解法:很经典的套路,和这题一样:http://www.cnblogs.com/spfa/p/7358672.html CDQ套并查集。 这题最开始是看了南神的代码才懂的,http://blog.csdn.net/hdu2014/article/details/47450709    因为要判断每一个点,而且一旦一个点之外的几个点形成了奇环的话这个点一定就是No,所以用分治来解。先判断每一段之外的点是否会成为奇环,如果是的话,这一段就全是No,反之就把这些点放到并查集里并记录,然后分治当前段,直到分治进行到单个点,分治结束后把并查集还原。真是神奇的分治。orz

//HDU 5354
#include <bits/stdc++.h>
using namespace std;
typedef pair<int,int>pi;
const int maxn = 400020;
vector<pi>E[maxn*2];
int n,m,f[maxn],sz[maxn],val[maxn],ans[maxn];
bool in(int a, int L, int R){
return a>=L&&a<=R;
}
void solve(int l, int r, int x, vector<pi>&tp);
pi find_set(int x){
int ret=x;
int w=0;
for(;f[ret]!=ret;ret=f[ret]) w^=val[ret];
w^=val[ret];
return pi(ret,w);
}
void CDQ(int l, int r, int x){
if(l == r){
ans[l]=1;
return;
}
E[x<<1].clear();
E[x<<1|1].clear();
vector<pi>tp[2];
int mid = (l+r)>>1;
for(int i=0; i<E[x].size(); i++){
int a=E[x][i].first,b=E[x][i].second;
if(in(a,l,mid)||in(b,l,mid)) E[x<<1].push_back(E[x][i]);
else tp[0].push_back(E[x][i]);
if(in(a,mid+1,r)||in(b,mid+1,r)) E[x<<1|1].push_back(E[x][i]);
else tp[1].push_back(E[x][i]);
}
solve(l,mid,x<<1,tp[0]);
solve(mid+1,r,x<<1|1,tp[1]);
}
void solve(int l, int r, int x, vector<pi>&tp)
{
vector<pi>res;
bool flag=0;
for(int i=0; i<tp.size(); i++){
int u=tp[i].first,v=tp[i].second;
pi fu = find_set(u), fv = find_set(v);
if(fu.first==fv.first){
if(!(fu.second^fv.second)){
flag = 1;
break;
}
}
else{
int t1=sz[fu.first]>sz[fv.first]?fu.first:fv.first;
int t2=fu.first+fv.first-t1;
int t3=fu.second^fv.second;
f[t2]=t1;
sz[t1]+=sz[t2];
res.push_back(pi(t2,t3));
val[t2]^=t3;
}
}
if(flag){
for(int i=l; i<=r; i++) ans[i]=0;
}
else CDQ(l,r,x);
for(int i=res.size()-1; i>=0; i--){
int u=res[i].first;
sz[f[u]]-=sz[u];
val[u]^=res[i].second;
f[u]=u;
}
}
int main()
{
int T;
scanf("%d", &T);
while(T--)
{
E[1].clear();
scanf("%d%d",&n,&m);
for(int i=1; i<=n; i++) f[i]=i,sz[i]=1,val[i]=1;
for(int i=1; i<=m; i++){
int u,v;
scanf("%d%d",&u,&v);
if(u>v) swap(u,v);
E[1].push_back(pi(u,v));
}
CDQ(1,n,1);
for(int i=1; i<=n; i++) printf("%d",ans[i]);
printf("\n");
}
return 0;
}

2015多校第6场 HDU 5354 Bipartite Graph CDQ,并查集的更多相关文章

  1. 2015多校第6场 HDU 5361 并查集,最短路

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5361 题意:有n个点1-n, 每个点到相邻点的距离是1,然后每个点可以通过花费c[i]的钱从i点走到距 ...

  2. 2015多校第6场 HDU 5355 Cake 贪心,暴力DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5355 题意:给你n个尺寸大小分别为1,2,3,…,n的蛋糕,要求你分成m份,要求每份中所有蛋糕的大小之 ...

  3. 2015多校第6场 HDU 5358 First One 枚举,双指针

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5358 题意:如题. 解法:观察式子发现,由于log函数的存在,使得这个函数的值域<=34,然后我 ...

  4. 2015多校第6场 HDU 5360 Hiking 贪心,优先队列

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5360 题意:给定n个人,现在要邀请这些人去远足,但每个人同意邀请的条件是当前已经同意去远足的人数c必须 ...

  5. 2015多校第6场 HDU 5353 Average 贪心,细节处理

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5353 题意:有n个人围城一个环,每一个人手里都有一些糖果,第i个人有ai块.现在有三种操作:第i个人给 ...

  6. 2015多校第9场 HDU 5405 Sometimes Naive 树链剖分

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5405 题意: 给你一棵n个节点的树,有点权.        要求支持两种操作: 操作1:更改某个节点的 ...

  7. 2015多校第8场 HDU 5382 GCD?LCM! 数论公式推导

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5382 题意:函数lcm(a,b):求两整数a,b的最小公倍数:函数gcd(a,b):求两整数a,b的最 ...

  8. 2015多校第7场 HDU 5378 Leader in Tree Land 概率DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5378 题意:一棵n个节点的树.对其节点进行标号(1~n).求恰好存在k个节点的标号是其节点所在子树的最 ...

  9. 2015多校第7场 HDU 5379 Mahjong tree 构造,DFS

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5379 题意:一颗n个节点n-1条边的树,现在要给每个节点标号(1~n),要求:(1)每一层的兄弟节点的 ...

随机推荐

  1. Luogu4899 IOI2018狼人(kruskal重构树+主席树)

    可以发现询问的即是“由起点开始‘只经过编号大于等于l的点’所形成的连通块”与“由终点开始‘只经过编号小于等于r的点’所形成的连通块”是否有交集.于是建出重构树,就可以知道每个询问的连通情况了.现在要知 ...

  2. 《转》'autocomplete="off"'在Chrome中不起作用解决方案

    最近项目中遇到一个令人头疼的问题,查阅各种资料,尝试各种方法,最终得以解决:哎···下面就说说这心酸的历程吧. 大家都知道autocomplete属性是表单字段中的HTML5新属性,该属性有两种状态值 ...

  3. 【题解】Atcoder AGC#01 E-BBQ Hard

    计数题萌萌哒~ 这道题其实就是统计 \(\sum_{i=1}^{n}\sum_{j=i+1}^{n}C\binom{a[i] + a[j]}{a[i] + a[j] + b[i] + b[j]}\) ...

  4. springMVC+spring+mybatis搭建最近

    一:概述SSM框架在项目开发中经常使用到,相比于SSH框架,它在仅几年的开发中运用的更加广泛. Spring作为一个轻量级的框架,有很多的拓展功能,最主要的我们一般项目使用的就是IOC和AOP. Sp ...

  5. BZOJ5333:[SDOI2018]荣誉称号——题解

    https://www.lydsy.com/JudgeOnline/problem.php?id=5333 https://www.luogu.org/problemnew/show/P4620 题意 ...

  6. MySQL - General error: 1390 Prepared statement contains too many placeholders

    报错原因:预处理 SQL语句时使用的占位符数量超过了最大限制(默认65535). 解决方案:拆分查询语句,每次使用的占位符低于限制即可.

  7. 洛谷 P2446 [SDOI2010]大陆争霸 解题报告

    P2446 [SDOI2010]大陆争霸 题目背景 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭的神曾·布拉 ...

  8. [codeforces/edu2]总结(F)

    链接:http://codeforces.com/contest/600 A题: 字符串处理. B题: sort+upper_bound C题: 统计一下每种字符的个数,然后贪心. (1) 如果没有奇 ...

  9. 轮廓问题/Outline Problem

    --------------------------------------------------- //已发布改进后的轮廓问题算法:http://www.cnblogs.com/andyzeng/ ...

  10. [USACO13FEB]出租车Taxi

    洛谷题目链接:[USACO13FEB]出租车Taxi 题目描述 Bessie is running a taxi service for the other cows on the farm. The ...