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 记录一下思路,不想写了...代码满天飞.
随机推荐
- vuex状态持久化
npm install vuex-persistedstate 在store.js里 import createPersistedState from 'vuex-persistedstate' co ...
- 【转】vue.js表单校验详解
官方文档:https://monterail.github.io/vuelidate/ https://github.com/monterail/vuelidate 1.npm安装vue-valida ...
- 【转】MVC5学习笔记 BindAttribute
// POST: Movies/Create // 为了防止“过多发布”攻击,请启用要绑定到的特定属性,有关 // 详细信息,请参阅 http://go.microsoft.com/fwlink/?L ...
- 将16进制unsigned char数组转换成整数
/** * 将unsigned char数组转换成long long数值 * {0x00 0x00 0x20 0x00}转换之后得到8192 * * @param str 数组 * @param le ...
- 用mobiscroll.js如何简单使用日期控件
首先,可以到官网学习,地址:https://docs.mobiscroll.com 第一步:引用js.css样式 1)mobiscroll.css 2)mobiscroll_date.css 3)jq ...
- php 图片添加水印和二维码
$host = $_SERVER['HTTP_HOST']; $save_code_file = './qrcodes/qrcode.png'; QrCode::format()->backgr ...
- Jquery源码探索
封装原理 这里参考的jquery来进行封装的一个常用方法的一个库,可作为自己的一个库 原理:创建一个构造函数,将所有方法放在该构造函数原型里,访问$()方法时,返回这个构造函数的实例化,这样就简单的实 ...
- [转载] JAVA面试题和项目面试核心要点精华总结(想进大公司必看)
JAVA面试题和项目面试核心要点精华总结(想进大公司必看) JAVA面试题和项目面试核心要点精华总结(想进大公司必看)
- 什么是RUP
Rational统一过程(Rational Unified Process,RUP)是由Rational软件公司推出的一种完整且完美的软件过程. RUP总结了经过多年商业化验证的6条最有效的软件开 ...
- UGUI动态绑定事件
using System.Collections.Generic;using UnityEngine;using UnityEngine.EventSystems;using UnityEngine. ...