uva 10972 RevolC FaeLoN cdoj 方老师和农场
//自己写的第一发tarjan
解:先进行双连通分解并缩点,分解后一定是一颗树,设叶节点个数为n那么答案就是(n+1)/2
关于双连通分量求解:在跑tarjan时判断每个点连向父节点的边是否是桥,如果是桥的话,该点的后代
中,未被染色的节点一点构成一个双连通分量,那么将其染色。
染色完成后依次检查每一条边的两端是
否为两种不同的颜色,如果是,所对应的颜色的度+1,最后看多少个度为1的节点就知道有多少叶子节点
也就能得到答案了。
#include<cstdio>
#include<iostream>
#include<cmath>
#include<algorithm>
#include<cstring>
#include<cstdlib>
#include<queue>
#include<vector>
#include<map>
#include<stack>
#include<string> using namespace std; const int MAXN=;
const int MAXM=; vector<int> G[MAXN];
int n,m,top,cnt1,cnt2;
bool vis[MAXN];
int color[MAXN],dfn[MAXN],low[MAXN];
int stk[MAXN];
int degree[MAXN]; void tarjan(int now,int fa){
cnt1++;
dfn[now]=low[now]=cnt1;
vis[now]=;
stk[top++]=now;
int sz=G[now].size();
for (int i=;i<sz;i++){
if (G[now][i]==fa) continue;
if (!vis[G[now][i]]){
tarjan(G[now][i],now);
low[now]=min(low[now],low[G[now][i]]);
if (low[G[now][i]]>dfn[now]){
cnt2++;
while (top>){
color[stk[--top]]=cnt2;
if (stk[top]==G[now][i]) break;
}
}
}
else{
low[now]=min(low[now],dfn[G[now][i]]);
}
}
} int main(){
while (scanf("%d%d",&n,&m)==){
cnt1=cnt2=top=;
memset(vis,,sizeof(vis));
memset(degree,,sizeof(degree));
memset(color,,sizeof(color));
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(stk,,sizeof(stk));
for (int i=;i<=n;i++){
G[i].clear();
}
for (int i=;i<m;i++){
int x,y;
scanf("%d%d",&x,&y);
G[x].push_back(y);
G[y].push_back(x);
}
for (int i=;i<=n;i++){
if (dfn[i]==) tarjan(i,-);
}
if (cnt2==){
printf("0\n");
continue;
}
for (int i=;i<=n;i++){
int sz=G[i].size();
for (int j=;j<sz;j++){
if (color[i]!=color[G[i][j]]){
degree[color[i]]++;
}
}
}
int ans=;
for (int i=;i<=cnt2;i++){
if (degree[i]==) ans+=;
if (degree[i]==) ans+=;
}
printf("%d\n",(ans+)/);
}
return ;
}
/*
7 7
1 2
2 3
3 4
2 5
4 5
5 6
5 7 3 3
1 2
2 3
1 3 7 5
1 2
2 3
4 5
5 6
5 7
*/
uva 10972 RevolC FaeLoN cdoj 方老师和农场的更多相关文章
- UVA 10972 - RevolC FaeLoN(边-双连通分量)
UVA 10972 - RevolC FaeLoN option=com_onlinejudge&Itemid=8&page=show_problem&category=547 ...
- UVA 10972 RevolC FaeLoN(边连通分量)
坑了我一天的题目..跑了20ms挂了,就知道有个小毛病= = 无向图转有向图判强连通. 首先要知道什么样的无向图可以转化为强连通图?连通分量(环)自然是可以的:那么扩大范围(存在割顶),发现点连通分量 ...
- UVA 10972 RevolC FaeLoN(边-双连通+缩点)
很好的一道图论题,整整撸了一上午... 题意是给定一个无向图,要求将所有边变为有向边,求最少加入多少条有向边,使得该图强连通?这里先假设一个问题:给定一个无向子图,该子图具有怎样的性质才能使得将其无向 ...
- UVA - 10972 RevolC FaeLoN
一道特别好的题qwq. 题目大意就是给你一个无向图,让你把边定向之后再加一些边使得这个图强连通,求最少需要加多少边. 一开始毫无头绪23333,数据范围让人摸不着头脑..... 然后开始画图,,,发现 ...
- UESTC_方老师和农场 2015 UESTC Training for Graph Theory<Problem L>
L - 方老师和农场 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC 899 方老师和农场 --双连通分量的构造
首先将原图中的连通分量缩点,一定可以将原图缩成一棵树的形式,然后统计这棵树的叶子节点个数,答案就是(leaf+1)/2.这里不再证明,可以画个图看一下. (简单说明一下,首先把两个最近公共祖先最远的两 ...
- cdoj 851 方老师与素数 bfs
方老师与素数 Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit St ...
- UESTC_方老师的分身 II CDOJ 915
方老师的分身 II Time Limit: 10000/5000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submi ...
- UESTC_方老师分身 I CDOJ 914
方老师分身 I Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others) Submit S ...
随机推荐
- MVC4 Controller器同名问题
一.创建项目 二.修改配置文件(路由器) 详情如下: 总结:解决Controller器同名问题,只需要修改2外,App_Start里的RouteConfig.cs文件和Area下的***AreaReg ...
- SQL Server dbcc checkdb 做了什么。
第一步: 读取系统元数据.读完这些数据后dbcc checkdb 就知道自己要检测的是一个怎样的数据库了.如果在这一步就出错了.dbcc 就直接出错 了.不会再运行下去. 第二步: 在dbcc che ...
- 竹林蹊径-深入浅出Windows内核开发作者的博客
http://blog.csdn.net/blog_index http://blog.csdn.net/blog_index/article/details/6012054 http://downl ...
- BMP彩色转成黑色二值图
一天半把彩色bmp转成黑白了. 原理是: 第一步:读出位图数据的偏移位置:即第11个字节,用fseek即可. 然后将偏移位置之前的数据全部写入新的bmp图中. 第二步:用fseek移到位图数据这前,判 ...
- JIRA官方:JIRA项目跟踪
问题无处不在 使用JIRA来捕捉任何类型的问题——从软件缺陷到新特性到需求和故事到任务和活动项.你可以很方便地定义自己的问题类型以匹配团队工作需要. 自定义工作流 一个项目跟踪工具不应该决定你的工作方 ...
- linux之SQL语句简明教程---主键,外来键
主键 (Primary Key) 中的每一笔资料都是表格中的唯一值.换言之,它是用来独一无二地确认一个表格中的每一行资料.主键可以是原本资料内的一个栏位,或是一个人造栏位 (与原本资料没有关系的栏位) ...
- 可执行文件(ELF)格式的理解
摘自http://www.cnblogs.com/xmphoenix/archive/2011/10/23/2221879.html 可执行文件(ELF)格式的理解 ELF(Executable an ...
- 《编写高质量代码 改善Java程序的151个建议》书摘
例子1:三元操作符的陷阱 int i = 80; String str1 = String.valueOf(i < 100 ? 90 : 100); String str2 = String.v ...
- hdu 5567 sequence1(水)
问题描述 给定长度为n的序列a,求有多少对i,j(i<j),使得∣ai−aj∣ mod b=c 输入描述 若干组数据(大概5组). 每组数据第一行三个整数n(≤n≤),b,c(≤c<b ...
- DSP TMS320C6000基础学习(1)——介绍
主要内容 1. Why process signals digitally? (1)模拟电路由模拟组件构成:电阻.电容及电感等,这些组件随着电压.温度或机械结构的改变会动态影响到模拟电路的效果: (2 ...