求满足题目要求的简单环,做出图中所有的点双,用vector存储点双中的边,如果该点双满足点数=边数,就是我们想要的,求边的异或和即可;如果该点双点数小于边数,说明有不只一个环覆盖,不满足题意。

 1 #include<bits/stdc++.h>
2 using namespace std;
3 #define int long long
4 #define N 1000005
5 int read(){
6 int x=0,f=1;char ch;
7 while(ch>'9'||ch<'0'){
8 if(ch=='-') f=-1;ch=getchar();
9 }
10 while(ch>='0'&&ch<='9'){
11 x=x*10+ch-'0';ch=getchar();
12 }
13 return f*x;
14 }
15 int dfn[N],low[N],v[N],e[N],top1,top2;
16 int bcc,sc[N],n,m,x,y,ans;
17 int head[N],nxt[N*2],to[N*2],tot=1,num;
18 bool used[N],vis[N];
19 vector<int>a[N];//存点双连通分量含的边
20 void add(int x,int y){
21 nxt[++tot]=head[x];
22 head[x]=tot;
23 to[tot]=y;
24 }
25
26 void tarjan(int x){
27 dfn[x]=low[x]=++num;
28 v[++top1]=x;//存点
29 for(int i=head[x];i;i=nxt[i]){
30 int y=to[i];
31 if(used[i>>1]) continue;
32 used[i>>1]=1;
33 e[++top2]=i>>1;//存边
34 if(!dfn[y]){
35 tarjan(y);
36 low[x]=min(low[x],low[y]);
37 if(low[y]<dfn[x]) continue;//不是点双连通分量,跳过
38 bcc++;
39 while(1){
40 int z=v[top1--];
41 sc[bcc]++;
42 if(z==y) break;
43 }
44 sc[bcc]++;//割点也要加进去
45 while(1){
46 int z=e[top2--];
47 a[bcc].push_back(z);
48 if(z==(i>>1)) break;
49 }
50 }
51 low[x]=min(low[x],dfn[y]);
52 }
53 }
54
55 signed main(){
56 n=read(),m=read();
57 for(int i=1;i<=m;i++){
58 x=read(),y=read();
59 add(x,y),add(y,x);
60 }
61 tarjan(1);
62 for(int i=1;i<=bcc;i++){
63 if(a[i].size()!=sc[i]) continue;
64 for(int j=0;j<a[i].size();j++) vis[a[i][j]]=1;
65 }
66 for(int i=1;i<=m;i++) if(vis[i]) ans^=i;
67 printf("%d\n",ans);
68 }

用low[y]<dfn[x]判断其不是点双;注意tot从1开始;统计每个点双中点的数量时要加上割点(即数量要加1)

220501 T1 困难的图论 (tarjan 点双)的更多相关文章

  1. 【Codefoces487E/UOJ#30】Tourists Tarjan 点双连通分量 + 树链剖分

    E. Tourists time limit per test: 2 seconds memory limit per test: 256 megabytes input: standard inpu ...

  2. 6409. 【NOIP2019模拟11.06】困难的图论(Tarjan求点双)

    题目描述 Description 给定由 n 个点 m 条边组成的无向连通图,保证没有重边和自环. 你需要找出所有边,满足这些边恰好存在于一个简单环中.一个环被称为简单环,当且仅当它包含的所有点都只在 ...

  3. POJ 3177 Redundant Paths (tarjan边双连通分量)

    题目连接:http://poj.org/problem?id=3177 题目大意是给定一些牧场,牧场和牧场之间可能存在道路相连,要求从一个牧场到另一个牧场要有至少两条以上不同的路径,且路径的每条pat ...

  4. 【BZOJ-1123】BLO Tarjan 点双连通分量

    1123: [POI2008]BLO Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 970  Solved: 408[Submit][Status][ ...

  5. tarjan求双联通分量(割点,割边)

    之前一直对tarjan算法的这几种不同应用比较混淆...我太弱啦! 被BLO暴虐滚过来 用tarjan求点双,很多神犇都给出了比较详细的解释和证明,在这里就不讲了(其实是这只蒟蒻根本不会orz) 这里 ...

  6. 图论-桥/割点/双连通分量/缩点/LCA

    基本概念: 1.割点:若删掉某点后,原连通图分裂为多个子图,则称该点为割点. 2.割点集合:在一个无向连通图中,如果有一个顶点集合,删除这个顶点集合,以及这个集合中所有顶点相关联的边以后,原图变成多个 ...

  7. UVALive 5135 Mining Your Own Bussiness【tarjan点双】

    LINK1 LINK2 题目大意 给你一个无向连通图,让你给一些点染上黑色,需要满足染色之后,断开任意一个节点,要满足任意一个联通块中剩下的节点中至少有一个黑点 思路 一开始想的是把每一个点双联通分量 ...

  8. POJ3177 Redundant Paths【tarjan边双联通分量】

    LINK 题目大意 给你一个有重边的无向图图,问你最少连接多少条边可以使得整个图双联通 思路 就是个边双的模板 注意判重边的时候只对父亲节点需要考虑 你就dfs的时候记录一下出现了多少条连向父亲的边就 ...

  9. POJ2942 Knights of the Round Table【Tarjan点双联通分量】【二分图染色】【补图】

    LINK 题目大意 有一群人,其中有一些人之间有矛盾,现在要求选出一些人形成一个环,这个环要满足如下条件: 1.人数大于1 2.总人数是奇数 3.有矛盾的人不能相邻 问有多少人不能和任何人形成任何的环 ...

随机推荐

  1. python template生成模板文件

    简介 在实际项目中,可能会出现需要批量生成特定格式或者特定内容的文件,因此,使用template文件生成便适用于在文件中大部分格式内容都是一致的,部分内容需要替换的情况. 模板文件 name: $NA ...

  2. MGR及GreatSQL资源汇总

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 简要说明 MGR相关课程 <实战MGR> <深入浅出MGR> MGR学习过程出现故障或疑问咨 ...

  3. 不止跑路,拯救误操作rm -rf /*的小伙儿

    摘要:误执行了 rm -rf /* 之后,除了跑路还能怎么办? 本文分享自华为云社区<拯救被 rm -rf 伤到的小伙>,作者:Gauss 松鼠会. 灵魂画师再次上线   在开饭前我们先了 ...

  4. LuoguP1858 多人背包(DP)

    第\(K\)优解这类问题可在\(DP\)过程中通过添维解决.归并出当前前\(K\)大的解. #include <iostream> #include <cstdio> #inc ...

  5. 基于bert_bilstm_crf的命名实体

    前言 本文将介绍基于pytorch的bert_bilstm_crf进行命名实体识别,涵盖多个数据集.命名实体识别指的是从文本中提取出想要的实体,本文使用的标注方式是BIOES,例如,对于文本虞兔良先生 ...

  6. Queue-jumpers - 平衡树

    题面 Ponyo and Garfield are waiting outside the box-office for their favorite movie. Because queuing i ...

  7. 大家都能看得懂的源码 - 那些关于DOM的常见Hook封装(二)

    本文是深入浅出 ahooks 源码系列文章的第十五篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 本篇接着针对关于 DOM 的各个 Hook 封装进行解读. us ...

  8. CF-1623C

    Problem - 1623C - Codeforces 题意: 给出一个序列,从第三个数字开始,你可以让他减少3*d,然后让它的前两个数字,分别加2*d,和d,找出序列中的最小值的最大值. 题解: ...

  9. 第五十篇: webpack中的loader(一) --css-loader

    好家伙, 1.webpack配置中devServer节点的常用配置项 devServer:{ //首次打包完成后,自动打开浏览器 open:ture, //在http协议中,如果端口号是80,则可以被 ...

  10. KingbaseES 参数 - ignore_char_null_check

    KingbaseES 基于PostgreSQL进行了大量的Oracle兼容性开发,为了能同时兼容Oracle 和 PG 的特性,增加参数进行控制.以下介绍 KingbaseES 下特有的参数 igno ...