P2860 [USACO06JAN]冗余路径Redundant Paths
实际上是一道tarjan缩点的题,tarjan求点双联通分量,主要思路就是缩完点之后,找新图中的叶子节点的个数,然后带入公式就行了。详情见lba的博客。
题干:
。。。略。
代码:
#include<iostream> #include<cstdio> #include<cmath> #include<ctime> #include<queue> #include<algorithm> #include<cstring> using namespace std; #define duke(i,a,n) for(int i = a;i <= n;i++) #define lv(i,a,n) for(int i = a;i >= n;i--) #define clean(a) memset(a,0,sizeof(a)) const int INF = 1 << 30; typedef long long ll; typedef double db; template <class T> void read(T &x) {char c;bool op = 0;while(c = getchar(), c < '0' || c > '9')if(c == '-') op = 1;x = c - '0';while(c = getchar(), c >= '0' && c <= '9')x = x * 10 + c - '0';if(op) x = -x; } template <class T> void write(T x) {if(x < 0) putchar('-'), x = -x;if(x >= 10) write(x / 10);putchar('0' + x % 10); } struct node {int l,r,nxt; }a[300010]; int lst[200010],len = 1,cnt = 0; void add(int x,int y) {a[++len].l = x;a[len].r = y;a[len].nxt = lst[x];lst[x] = len; } int n,m,low[200010],dfn[200010]; int from[200010],col[200010]; int du[200010]; int vis[200010]; int top = 0,st[100010],tot = 0; void tarjan(int u,int g) {bool flag = 0;vis[u] = 1;st[++top] = u;low[u] = dfn[u] = ++cnt;for(int k = lst[u];k;k = a[k].nxt){int y = a[k].r;if(y == g && !flag){flag = 1;continue;}if(!dfn[y]){tarjan(y,u);low[u] = min(low[u],low[y]);}else if(vis[y])low[u] = min(low[u],dfn[y]);}if(low[u] == dfn[u]){int p = 0;tot++;do{p = st[top--];col[p] = tot;vis[p] = 0;}while(p != u);} } int main() {read(n);read(m);duke(i,1,m){int x,y;read(x);read(y);add(x,y);add(y,x);}duke(i,1,n)if(!dfn[i])tarjan(i,0);int ans = 0;duke(i,1,n){for(int k = lst[i];k;k = a[k].nxt){int x = a[k].l;int y = a[k].r;if(col[x] != col[y]){du[col[x]]++;du[col[y]]++;}}} // for(int i = 1; i <= tot; ++i) printf("%d ", du[i]); puts("")duke(i,1,tot)if(du[i] == 2)ans++;if(tot == 1)printf("0\n");elseprintf("%d\n",(ans + 1) / 2);return 0; }
转载于:https://www.cnblogs.com/DukeLv/p/9761317.html
P2860 [USACO06JAN]冗余路径Redundant Paths相关推荐
- 无向图强联通分量-洛谷 P2860 [USACO06JAN]冗余路径Redundant Paths
https://www.luogu.org/problem/show?pid=2860 这个就是无向图的强联通: 有向图的两点再一个分量里,是x可以到y,y也可到x: 但无向图本来就是双向的,所以我们 ...
- POJ3177 Redundant Paths
POJ3177 Redundant Paths 文章目录 Description 题意: 题解: 代码: Time Limit: 1000MS Memory Limit: 65536K Total S ...
- [POJ3177]Redundant Paths(双联通)
在看了春晚小彩旗的E技能(旋转)后就一直在lol--额抽点时间撸一题吧-- Redundant Paths Time Limit: 1000MS Memory Limit: 65536K Tota ...
- Quartz-2D绘图之路径(Paths)详解
在上篇文章中,我们简单的理解了绘图上下文,今天我们来认识一下Quartz-2D中另一个重要的概念,路径(Paths). 一.理解路径 路径定义了一个或多个形状,或是子路径.一个子路径可由直线,曲线,或 ...
- POJ 3177 Redundant Paths POJ 3352 Road Construction(双连接)
POJ 3177 Redundant Paths POJ 3352 Road Construction 题目链接 题意:两题一样的.一份代码能交.给定一个连通无向图,问加几条边能使得图变成一个双连通图 ...
- 数字IC设计学习笔记_静态时序分析STA_伪路径False Paths
数字IC设计学习笔记 半周期路径Half Cycle Path 1. 伪路径False Paths 2. 如何处理False Paths 1. 伪路径False Paths 在设计中,有些路径是不可能 ...
- Redundant Paths 分离的路径(边双连通分量)
题干: 为了从F(1≤F≤5000)个草场中的一个走到另一个,贝茜和她的同伴们有时不得不路过一些她们讨厌的可怕的树.奶牛们已经厌倦了被迫走某一条路,所以她们想建一些新路,使每一对草场之间都会至少有两条 ...
- [BZOJ1718]:[Usaco2006 Jan] Redundant Paths 分离的路径(塔尖)
题目传送门 题目描述 为了从F个草场中的一个走到另一个,贝茜和她的同伴们有时不得不路过一些她们讨厌的可怕的树.奶牛们已经厌倦了被迫走某一条路,所以她们想建一些新路,使每一对草场之间都会至少有两条相互分 ...
- bzoj 1718: [Usaco2006 Jan] Redundant Paths 分离的路径
题意 给你一个无向图 问你最少添加多少条边可以使得他变成边双图 题解 直接双连通缩点 得到一颗树 然后答案是叶子节点/2向上取整 取法是每一次找两个LCA深度最小的叶子,两个连边就可以了 然后不知道为 ...
最新文章
- java jdk1.8环境变量的配置
- 应届生,你凭什么认为你当得了产品经理?| PMCAFF
- OpenCASCADE:Modeling Algorithms模块几何工具之来自约束的曲线和曲面
- 图的遍历(Java)构造器
- SpringMVC学习笔记整理
- 几种可以不用过于投入精力去交往的人脉
- GridView表头排序方法设置
- 将16进制unsigned char数组转换成整数
- IP地址与数字地址相互转换
- 端口与进程-----Window cmd命令
- 修正win10部署JDK8(使用JDK文件夹中的自带JRE)
- 微信服务号获取地理位置
- Halcon仿射变换图片(旋转、缩放、平移)
- 制作字幕.html教程,如何制作电影字幕,视频字幕制作软件|免费给视频加字幕
- Android背景斜线
- c++字符串与c字符串
- 【openGL】安装篇(上):Windows
- 2019年软件QA与测试八大关键词
- Android中PopupWindow遮罩层的设置
- 九年级计算机教学课时计划,信息技术教学计划(精选3篇)
热门文章
- ftp 501错误_分享,HTTP协议错误代码大全
- java透明度_纯度与参考透明度
- 输入一行字符,用Java分别统计出其中英文字母、空格、数字和其他字符的个数。
- Java打印出所有的水仙花数
- AI学习笔记(十一)CNN之图像识别(下)
- gis属性表怎么导成excel_将Excel数据导入到ArcGIS属性表
- 大规模中文自然语言处理语料(百科,问答、新闻,翻译)
- Deep Learning with PyTorch 必看教程集(4本)
- python机器学习:朴素贝叶斯分类算法
- python字符串驼峰转换_将字符串转换为驼峰格式