求满足题目要求的简单环,做出图中所有的点双,用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. gitlab+jenkins学习笔记

    一.部署gitlab gitlab部署我采用的是docker的方式,这种方式的优势是方便:之前部署过非docker的gitlab,需要配置安装许多东西,太麻烦,还是docker部署方便,从官网pull ...

  2. 清北学堂 2020 国庆J2考前综合强化 Day7

    目录 1. 题目 T1 魔力石 题目描述 Sol T2 和 题目描述 Sol T3 数对 题目描述 Sol T4 海豹王国 题目描述 Sol 考场策略 1. 题目 T1 魔力石 题目描述 题目描述 小 ...

  3. 举重若轻流水行云,前端纯CSS3实现质感非凡的图片Logo鼠标悬停(hover)光泽一闪而过的光影特效

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_197 喜欢看电影的朋友肯定会注意到一个有趣的细节,就是电影出品方一定会在片头的Logo环节做一个小特效:暗影流动之间光泽一闪而过, ...

  4. Java学习(二)Dos

    打开CMD方式 开始+系统+命令提示符 WIN键+R 输入cmd 在任意的文件夹下面,按住SHIFT键+鼠标右键,在此处打开命令行窗口 在资源管理器的地址栏前面加上cmd 路径 常用Dos命令 #盘符 ...

  5. 解析MySQL存储过程的游标执行过程

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 内容提纲 一.测试环境搭建 二.执行过程解析 三.注意事项 一.测试环境搭建 首先创建一张表,并插入几行数据字段: CRE ...

  6. 使用jmh框架进行benchmark测试

    性能问题 最近在跑flink社区1.15版本使用json_value函数时,发现其性能很差,通过jstack查看堆栈经常在执行以下堆栈 可以看到这里的逻辑是在等锁,查看jsonpath的LRUCach ...

  7. Webstorm设置背景图为Windows桌面背景

    桌面背景图会缓存在这个目录中,文件名不确定在改变桌面背景后会不会变. C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Themes\CachedFiles ...

  8. 关于Redis在windows上运行及fork函数问题

    Redis在将数据库进行持久化操作时,需要fork一个进程,但是windows并不支持fork,导致在持久化操作期间,Redis必须阻塞所有的客户端直至持久化操作完成.微软的一些工程师花费时间在解决在 ...

  9. 【Homebrew】安装

    /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" 官网安 ...

  10. Go语言知识查漏补缺|基本数据类型

    前言 学习Go半年之后,我决定重新开始阅读<The Go Programing Language>,对书中涉及重点进行全面讲解,这是Go语言知识查漏补缺系列的文章第二篇,前一篇文章则对应书 ...