poj 1236 强联通分量
大致题意给你有一个点数为n<=100的有向图。
求解两个子任务:
1:最少给多少个点信息,这些点的信息可以顺着有向边传遍全图。
2:最少要加多少条边,使得整个图强联通。
求强联通分量再缩点后得到一个有向无环图。
设其入度为0的点数为t1,出度为0的点数为t2
1的答案即为强联通缩点之后入度为0的点的数量t1。
2的答案即为max(t1,t2).
注意一个特殊情况:若缩点后只有一个点了(即原图便是强联通的)此时t1=1,t2=1但是第二个任务的答案应当是0。
AC代码:
#include<cstdio>
#include<cmath>
#include<cstring>
#include<iostream>
#define rep(i,a,b) for(int i=a;i<=b;++i)
using namespace std;
const int MAXN=;
int n,cnt;
int graph[MAXN][MAXN];
int DFN[MAXN],low[MAXN],Stap[MAXN],label[MAXN];
bool instake[MAXN];
int Stop,Bcnt;
int adjm[MAXN][MAXN];
int in[MAXN],out[MAXN];
void init()
{
memset(graph,,sizeof(graph));
memset(DFN,,sizeof(DFN));
memset(in,,sizeof(in));
memset(out,,sizeof(out));
memset(adjm,,sizeof(adjm));
memset(instake,,sizeof(instake));
int t;
cnt=;Stop=;Bcnt=;
rep(i,,n)
{
while(scanf("%d",&t)==&&t)
{
graph[i][++graph[i][]]=t;
}
}
}
void tarjan(int u)
{
DFN[u]=low[u]=++cnt;
instake[u]=;
Stap[++Stop]=u;
rep(i,,graph[u][])
{
int v=graph[u][i];
if(!DFN[v])
{
tarjan(v);
if(low[v]<low[u]) low[u]=low[v];
}
else if(instake[v]&&DFN[v]<low[u]) low[u]=DFN[v];
}
int j;
if(DFN[u]==low[u])
{
++Bcnt;
do
{
j=Stap[Stop--];
instake[j]=;
label[j]=Bcnt;
}while(j!=u);
}
}
int main()
{
//freopen("in.txt","r",stdin);
while(scanf("%d",&n)==)
{
init();
rep(i,,n)
{
if(!DFN[i]) tarjan(i);
}
if(Bcnt==)
{
printf("1\n0\n");continue;
}
rep(i,,n)
{
rep(j,,graph[i][])
{
int v=graph[i][j];
if(label[i]!=label[v])
{
out[label[i]]++;
in[label[v]]++;
}
}
}
int t1=,t2=;
rep(i,,Bcnt)
{
if(in[i]==) t1++;
if(out[i]==) t2++;
}
printf("%d\n%d\n",t1,max(t1,t2));
}
return ;
}
poj 1236 强联通分量的更多相关文章
- POJ 2186 强联通分量
点击打开链接 题意:牛A喜欢牛B,若牛B喜欢牛C,则牛A喜欢牛C,问最后多少牛被其它全部牛喜欢 思路:用强联通分量进行缩点,最后形成的图是有向无环图DAG.而拓扑序的值为DAG的长度,则加一,可是最后 ...
- 【POJ 1236 Network of Schools】强联通分量问题 Tarjan算法,缩点
题目链接:http://poj.org/problem?id=1236 题意:给定一个表示n所学校网络连通关系的有向图.现要通过网络分发软件,规则是:若顶点u,v存在通路,发给u,则v可以通过网络从u ...
- POJ 2186-Popular Cows (图论-强联通分量Korasaju算法)
题目链接:http://poj.org/problem?id=2186 题目大意:有n头牛和m对关系, 每一对关系有两个数(a, b)代表a牛认为b牛是“受欢迎”的,且这种关系具有传递性, 如果a牛认 ...
- POJ 2186 Popular Cows(强联通分量)
题目链接:http://poj.org/problem?id=2186 题目大意: 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种 ...
- POJ 2186 Popular cows(Kosaraju+强联通分量模板)
题目链接:http://poj.org/problem?id=2186 题目大意:给定N头牛和M个有序对(A,B),(A,B)表示A牛认为B牛是红人,该关系具有传递性,如果牛A认为牛B是红人,牛B认为 ...
- POJ 1904 King's Quest 强联通分量+输入输出外挂
题意:国王有n个儿子,现在这n个儿子要在n个女孩里选择自己喜欢的,有的儿子可能喜欢多个,最后国王的向导给出他一个匹配.匹配有n个数,代表某个儿子和哪个女孩可以结婚.已知这些条件,要你找出每个儿子可以和 ...
- Kosaraju算法---强联通分量
1.基础知识 所需结构:原图.反向图(若在原图中存在vi到vj有向边,在反向图中就变为vj到vi的有向边).标记数组(标记是否遍历过).一个栈(或记录顶点离开时间的数组). 算法描叙: :对 ...
- [CF #236 (Div. 2) E] Strictly Positive Matrix(强联通分量)
题目:http://codeforces.com/contest/402/problem/E 题意:给你一个矩阵a,判断是否存在k,使得a^k这个矩阵全部元素都大于0 分析:把矩阵当作01矩阵,超过1 ...
- UVa 11324 & 强联通分量+DP
题意: 一张无向图,求点集使其中任意两点可到达. SOL: 强联通分量中的点要么不选要么全都选,然后缩点DAG+DP 记录一下思路,不想写了...代码满天飞.
随机推荐
- 更改Linux语言环境
查看本地语言环境 locale 中文环境: export LC_ALL=zh_CN.UTF- 英文环境:export LC_ALL=en_US.UTF-8 具体设置其他环境百度...
- Eclipse导入Oracle/MySQL数库驱动包教程
在操作数据库时除了import相关的SQL类外,还得在项目中导入数据库的驱动才能连接和操作数据库. 而数据库驱动jar包在默认Java的lib里是没有的,要自己到官网下载导入:本教程以Oracle为例 ...
- laravel中的plicy授权方法:
1.用命令新建policy: php artisan make:policy PostPolicy 2.在app/Policies/PostPolicy.php中添加处理文件的权限的方法: //修改: ...
- printf以%d形式输出浮点数的问题
若运行时从键盘上输入9876543210l,则下面程序的输出结果是 int main(){ int a;float b,c; scanf("%2d%3f%4f",&a,&a ...
- WPF技术实现控件截图
1.http://www.cnblogs.com/TianFang/archive/2012/10/07/2714140.html 2.http://www.silverlightchina.net/ ...
- http协议与浏览器缓存
http协议与浏览器缓存 F5刷新与在地址栏回车的区别 链接
- Oauth2.0:Access Token 与 Refresh Token
access token 是客户端访问资源服务器的令牌.拥有这个令牌代表着得到用户的授权.然而,这个授权应该是临时的,有一定有效期.这是因为,access token 在使用的过程中可能会泄露.给 a ...
- 《Python》常用模块之collections模块
内置的数据类型: int float complex str list tuple dict set 基础数据类型: int float complex str list tuple ...
- HashMap和Hashtable有什么区别?
HashMap和Hashtable都是实现Map接口的,但是: 1.HashMap允许键和值都是null的,而Hashtable不允许键和值为null 2.Hashtable是同步的,而HashMap ...
- matlab中的reshape快速理解,卷积和乘积之间的转换
reshape: THe convertion between convolution and multiplication: