poj 3177&&3352 求边双联通分量,先求桥,然后求分量( 临界表代码)
- /*这道题是没有重边的,求加几条边构成双联通,求边联通分量,先求出桥然后缩点,成一个棵树
- 找叶子节点的个数*/
- #include<stdio.h>//用容器写在3177这个题上会超内存,但是用临界表过了
- #include<string.h>/*此代码为临界表代码*/
- #define N 5100
- struct node {
- int u,v,next;
- }bian[N*4];
- int dfn[N],low[N],index,f[N*4],n,head[N],yong;
- int Min(int a,int b) {
- return a>b?b:a;
- }
- void addedge(int u,int v) {//建边
- bian[yong].u=u;
- bian[yong].v=v;
- bian[yong].next=head[u];
- head[u]=yong++;
- }
- void tarjan(int u,int pre) {//
- dfn[u]=low[u]=++index;
- int i;
- for(i=head[u];i!=-1;i=bian[i].next) {
- int v=bian[i].v;
- if(i==(pre^1))continue;
- if(!dfn[v]) {
- tarjan(v,i);
- low[u]=Min(low[u],low[v]);//
- if(low[v]>dfn[u])//标记桥
- f[i]=f[i^1]=1;//标记双向的边
- }
- else
- low[u]=Min(low[u],dfn[v]);
- }
- }
- int cnt,c[N];
- void dfs(int u,int fa) {//缩点
- int i;
- c[u]=cnt;//不能放到循环里面,
- for(i=head[u];i!=-1;i=bian[i].next) {
- int v=bian[i].v;
- if(!f[i]&&!c[v]&&i!=(fa^1))//桥不能走,不能回头路,没有被缩过
- dfs(v,i);
- }
- return ;
- }
- int degree[N];
- int slove() {
- int i;
- cnt=1;
- memset(c,0,sizeof(c));
- for(i=1;i<=n;i++)//缩点
- if(!c[i]) {
- dfs(i,-1);
- cnt++;
- }
- memset(degree,0,sizeof(degree));
- for(i=0;i<yong;i++) {
- int u,v;
- u=bian[i].u;
- v=bian[i].v;
- if(c[u]!=c[v]) {//所有边中
- degree[c[u]]++;
- degree[c[v]]++;//记录度数
- }
- }
- int leave=0;
- for(i=1;i<cnt;i++) {//度数为一的叶子节点,因为为双向边
- if(degree[i]==2)
- leave++;
- }
- return (leave+1)/2;
- }
- int main() {
- int m,i,a,b,ans;
- while(scanf("%d%d",&n,&m)!=EOF) {
- memset(dfn,0,sizeof(dfn));
- memset(low,0,sizeof(low));
- memset(f,0,sizeof(f));
- yong=0;
- memset(head,-1,sizeof(head));
- index=0;
- while(m--){
- scanf("%d%d",&a,&b);
- addedge(a,b);
- addedge(b,a);
- }
- for(i=1;i<=n;i++)
- if(!dfn[i])
- tarjan(i,-1);
- ans=slove();
- printf("%d\n",ans);
- }
- return 0;
- }
poj 3177&&3352 求边双联通分量,先求桥,然后求分量( 临界表代码)的更多相关文章
- POJ 3352 Road Construction ; POJ 3177 Redundant Paths (双联通)
这两题好像是一样的,就是3177要去掉重边. 但是为什么要去重边呢??????我认为如果有重边的话,应该也要考虑在内才是. 这两题我用了求割边,在去掉割边,用DFS缩点. 有大神说用Tarjan,不过 ...
- POJ 2942 Knights of the Round Table 补图+tarjan求点双联通分量+二分图染色+debug
题面还好,就不描述了 重点说题解: 由于仇恨关系不好处理,所以可以搞补图存不仇恨关系, 如果一个桌子上面的人能坐到一起,显然他们满足能构成一个环 所以跑点双联通分量 求点双联通分量我用的是向栈中pus ...
- hdu 3352 求边双联通分量模板题(容器)
/*这道题是没有重边的,求加几条边构成双联通,求边联通分量,先求出桥然后缩点,成一个棵树 找叶子节点的个数*/ #include<stdio.h> #include<string.h ...
- POJ3177 & 求边双联通分量
题意: 给一张无向图,求加多少边使原图任意两点边双联通. SOL: 一个不会写边双点双强联通的傻逼. 一个结论:把一棵树变成满足条件的图需要加的边使入度为1的点数+1除以2.------>就是树 ...
- 【UVA10972】RevolC FaeLoN (求边双联通分量)
题意: 给你一个无向图,要求把所有无向边改成有向边,并且添加最少的有向边,使得新的有向图强联通. 分析: 这题的解法还是很好想的.先用边双联通分量缩点,然后找新图中入度为0和为1的点,入度为0则ans ...
- 洛谷P2860 [USACO06JAN]冗余路径Redundant Paths(tarjan求边双联通分量)
题目描述 In order to get from one of the F (1 <= F <= 5,000) grazing fields (which are numbered 1. ...
- poj 3177 Redundant Paths(边双连通分量+缩点)
链接:http://poj.org/problem?id=3177 题意:有n个牧场,Bessie 要从一个牧场到另一个牧场,要求至少要有2条独立的路可以走.现已有m条路,求至少要新建多少条路,使得任 ...
- POJ 3352 Road Construction 双联通分量 难度:1
http://poj.org/problem?id=3352 有重边的话重边就不被包含在双连通里了 割点不一定连着割边,因为这个图不一定是点连通,所以可能出现反而多增加了双连通分量数的可能 必须要用割 ...
- poj 2942 求点双联通+二分图判断奇偶环+交叉染色法判断二分图
http://blog.csdn.net/lyy289065406/article/details/6756821 http://www.cnblogs.com/wuyiqi/archive/2011 ...
随机推荐
- 2749: [HAOI2012]外星人
首先像我一样把柿子画出来或者看下hint 你就会发现其实是多了个p-1这样的东东 然后除非是2他们都是偶数,而2就直接到0了 算一下2出现的次数就好 #include<cstdio> #i ...
- word2vec和word embedding有什么区别?
word2vec和word embedding有什么区别? 我知道这两个都能将词向量化,但有什么区别?这两个术语的中文是什么? from: https://www.zhihu.com/question ...
- Codeforces--630D--Hexagons(规律)
D - Hexagons! Crawling in process... Crawling failed Time Limit:500MS Memory Limit:65536KB ...
- git 设定全局ignore
创建: 2017/08/08 位置: $HOME/.config/git/ignore git/ignore 要自建 内容 https://github.com/github/gitignore ...
- thinkphp session db配置
这篇文章主要介绍了ThinkPHP实现将SESSION存入MYSQL的方法,需要的朋友可以参考下 本文以实例讲解了ThinkPHP实现将SESSION存入MYSQL的方法,所采用的运行环境是Thi ...
- golang 获取statuscode
最近日志打印的时候需要打印状态码,但是因为interface的原因直接获取失败,http.Request里面的response不知道怎么使用,所以就自己重写writeheader,write来截取st ...
- TypeError: Object function (req, res, next) { app.handle(req, res, next); } has no method 'configure'
TypeError: Object function (req, res, next) { app.handle(req, res, next); } has no method 'configure ...
- Cannot find module 'crc'
这个时候你只需要打开你nodejs安装的目录,在其中执行 npm install crc(这里查什么模块(module)就安装什么模块).
- css3动画之1--animation小例子
1.首先看效果 2.代码及分析 <style type="text/css"> #div1 { margin:100px; position: absolute; te ...
- Mysql分组求和&LIMIT
分组求和mysql> SELECT coalesce(name, '总数'), SUM(singin) as singin_count FROM employee_tbl GROUP BY na ...