LUOGU P2860 [USACO06JAN]冗余路径Redundant Paths (双联通,缩点)
解题思路
刚开始是找的桥,后来发现这样不对,因为一条链就可以被卡。后来想到应该缩点后找到度数为1 的点然后两两配对。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<set> using namespace std;
const int MAXN = ;
const int MAXM = ; inline int rd(){
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {f=ch=='-'?:;ch=getchar();}
while(isdigit(ch)) {x=(x<<)+(x<<)+ch-'';ch=getchar();}
return f?x:-x;
} int n,m,head[MAXN],cnt,to[MAXM<<],nxt[MAXM<<],num,du[MAXN];
int dfn[MAXN],low[MAXN],ans,col[MAXN],col_num,stk[MAXN],top;
bool vis[MAXN];
set<pair<int,int> > S; inline void add(int bg,int ed){
to[++cnt]=ed,nxt[cnt]=head[bg],head[bg]=cnt;
} void tarjan(int x,int fa){
dfn[x]=low[x]=++num;vis[x]=;stk[++top]=x;int u;
for(register int i=head[x];i;i=nxt[i]){
u=to[i];if(u==fa) continue;
if(!dfn[u]) {tarjan(u,x);low[x]=min(low[x],low[u]);}
else if(vis[x])low[x]=min(low[x],dfn[u]);
}
if(low[x]!=dfn[x]) return;
col[x]=++col_num;vis[x]=;
while(stk[top]!=x) {
col[stk[top]]=col_num;
vis[stk[top--]]=;
}top--;
} int main(){
n=rd(),m=rd();int x,y;pair<int,int> p;
for(int i=;i<=m;i++){
x=rd(),y=rd();p=make_pair(x,y);
if(S.find(p)!=S.end()) continue;
S.insert(p);S.insert(make_pair(y,x));
add(x,y),add(y,x);
}
tarjan(,);
// for(int i=1;i<=n;i++) cout<<col[i]<<" ";
for(int i=;i<=n;i++)
for(int j=head[i];j;j=nxt[j])
if(col[i]!=col[to[j]]) du[col[i]]++,du[col[to[j]]]++;
for(int i=;i<=col_num;i++) if(du[i]==) ans++;
cout<<(ans+)/;
return ;
}
LUOGU P2860 [USACO06JAN]冗余路径Redundant Paths (双联通,缩点)的更多相关文章
- luogu P2860 [USACO06JAN]冗余路径Redundant Paths
题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1- ...
- 【luogu P2860 [USACO06JAN]冗余路径Redundant Paths】 题解
题目链接:https://www.luogu.org/problemnew/show/P2860 考虑在无向图上缩点. 运用到边双.桥的知识. 缩点后统计度为1的点. 度为1是有一条路径,度为2是有两 ...
- luogu P2860 [USACO06JAN]冗余路径Redundant Paths |Tarjan
题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1. ...
- 洛谷 P2860 [USACO06JAN]冗余路径Redundant Paths 解题报告
P2860 [USACO06JAN]冗余路径Redundant Paths 题目描述 为了从F(1≤F≤5000)个草场中的一个走到另一个,贝茜和她的同伴们有时不得不路过一些她们讨厌的可怕的树.奶牛们 ...
- 洛谷P2860 [USACO06JAN]冗余路径Redundant Paths(tarjan求边双联通分量)
题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1. ...
- P2860 [USACO06JAN]冗余路径Redundant Paths tarjan
题目链接 https://www.luogu.org/problemnew/show/P2860 思路 缩点,之后就成了个树一般的东西了 然后(叶子节点+1)/2就是答案,好像贪心的样子,lmc好像讲 ...
- 洛谷P2860 [USACO06JAN]冗余路径Redundant Paths
题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1. ...
- P2860 [USACO06JAN]冗余路径Redundant Paths
题解: 首先要边双缩点这很显然 然后变成树上问题 发现dp,dfs好像不太对 考虑一下度数 发现只要在度数为1的点之间连边 但我好像不太会证明这个东西.. 网上也没有看到比较正确的证明方法和连边策略. ...
- 缩点【洛谷P2860】 [USACO06JAN]冗余路径Redundant Paths
P2860 [USACO06JAN]冗余路径Redundant Paths 为了从F(1≤F≤5000)个草场中的一个走到另一个,贝茜和她的同伴们有时不得不路过一些她们讨厌的可怕的树.奶牛们已经厌倦了 ...
随机推荐
- thinkphp5.1、thinkphp6
下载原装:https://packagist.org/packages/topthink/think composer create-project topthink/think tp 6.0.*-d ...
- Linux 进程间通信 消息队列
1.特点: 消息队列是IPC对象的一种 消息队列由消息队列ID来唯一标识 消息队列就是一个消息的列表.用户可以在消息队列中添加消息.读取消息等. 消息队列可以按照类型来发送/接收消息(消息的类型是正整 ...
- fedora 28 missing PROG bison
yum install bison Missing PROG dlltool Missing PROG flex Missing PROG mt
- python学习笔记(十)——正则表达式和re模块
#正则表达式和re模块 # match(pattern, string,[flag]) #在字符串开始时进行匹配 # pattern 正则表达式 # string 要匹配的字符串 # [flag] 可 ...
- Linux 错误: $'\r': command not found
是linux无法解析$'\r'.这其实是windows与linux系统的差异导致的. 因为linux上的换行符为\n,而windows上的换行符为\r\n.所以脚本到linux上就无法解析了. 通常的 ...
- 1、Go语言的介绍
一.概念 Go语言(Golang)是云计算时代的C语言,使用Go编译的程序可以媲美C/C++代码的速度,而且更加安全.支持并行进程. 二.Go语言的优势 1.部署简单.可以直接编译成机器码,不依赖其他 ...
- 2017-3-8 html基础标签
<head></head>头标签 <title>页面标签</title> <body>文档的内容可在浏览器中显视的</body> ...
- 解析Tomcat之HttpServlet详解
解析Tomcat之HttpServlet详解 Servlet的框架是 由两个Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所 ...
- BOM DOM 简介
BOM和DOM简介 BOM,Browser Object Model ,浏览器对象模型. BOM主要提供了访问和操作浏览器各组件的方式. 浏览器组件: window(浏览器窗口) locati ...
- (转)在Source Insight中看Python代码
http://blog.csdn.net/lvming404/archive/2009/03/18/4000394.aspx SI是个很强大的代码查看修改工具,以前用来看C,C++都是相当happy的 ...