[poj1236]Network of Schools(targin缩点SCC)
题意:有N个学校,从每个学校都能从一个单向网络到另外一个学校。
1:初始至少需要向多少个学校发放软件,使得网络内所有的学校最终都能得到软件。
2:至少需要添加几条边,使任意向一个学校发放软件后,经过若干次传送,网络内所有的学校最终都能得到软件。
解题关键:1、缩点之后求出入度为0的点的个数;
2、缩点之后入度为0点和出度为0点的个数的max,(因为是任意点可到达全图),若存在点到达全图,添加入度-1条边即可。
注意特判只有一个节点的情况。
dfn需要初始化
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cstdlib>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
#define MAXN 120
#define MAXM 100010
struct edge{
int to,nxt;
}e[MAXM];
int degree1[MAXN],degree2[MAXN];
int head[MAXN],st[MAXN],dfn[MAXN],lowest[MAXN],belong[MAXN];
bool inst[MAXN];
int n,scnt,top,tot;//scnt从1开始
void init(){
memset(head,-,sizeof head);
memset(degree1,,sizeof degree1);
memset(degree2,,sizeof degree2);
scnt=top=tot=;
} void add_edge(int u, int v){
e[tot].to=v;
e[tot].nxt=head[u];
head[u]=tot++;
} void Tarjan(int u){
dfn[u]=lowest[u]=++tot;
inst[u]=;
st[top++]=u;
for(int i=head[u];i!=-;i=e[i].nxt){
int v=e[i].to;
if(!dfn[v]){
Tarjan(v);
lowest[u]=min(lowest[u],lowest[v]);
}
else if(inst[v]){
lowest[u]=min(lowest[u],dfn[v]);//也可用lowest
}
}
if(dfn[u]==lowest[u]){
scnt++;
int t;
do{
t=st[--top];
inst[t]=false;
belong[t]=scnt;
}while(t!=u);
}
} void solve(){//缩点
for(int i=;i<=n;i++) if(!dfn[i]) Tarjan(i);
for(int i=;i<=n;i++){
for(int j=head[i];j!=-;j=e[j].nxt){
if(belong[i]!=belong[e[j].to]){
degree1[belong[i]]++,degree2[belong[e[j].to]]++;
}
}
}
int sum1=,sum2=;
for(int i=;i<=scnt;i++){
if(!degree1[i]) sum1++;
if(!degree2[i]) sum2++;
}
if(scnt==){//1个节点进行特判
printf("1\n0\n");
return;
}
printf("%d\n",sum2);
printf("%d\n",max(sum1,sum2));
return;
} int main(){
int a;
while(scanf("%d",&n)!=EOF){
init();
int m=;
while(scanf("%d",&a)){
if(a==){
m++;
if(m>n) break;
continue;
}
add_edge(m,a);
}
solve();
}
return ;
}
[poj1236]Network of Schools(targin缩点SCC)的更多相关文章
- P2746 [USACO5.3]校园网Network of Schools// POJ1236: Network of Schools
P2746 [USACO5.3]校园网Network of Schools// POJ1236: Network of Schools 题目描述 一些学校连入一个电脑网络.那些学校已订立了协议:每个学 ...
- POJ1236 Network of Schools —— 强连通分量 + 缩点 + 入出度
题目链接:http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS Memory Limit: 10000K Tot ...
- 洛谷 P2746 [USACO5.3]校园网Network of Schools (Tarjan,SCC缩点,DAG性质)
P2746 [USACO5.3]校园网Network of Schools https://www.luogu.org/problem/P2746 题目描述 一些学校连入一个电脑网络.那些学校已订立了 ...
- POJ1236 Network of Schools (强连通)(缩点)
Network of Schools Time Limit: 1000MS ...
- poj-1236.network of schools(强连通分量 + 图的入度出度)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 27121 Accepted: 10 ...
- POJ1236 - Network of Schools tarjan
Network of Schools Time Limit: 1000MS Memory Limi ...
- POJ 1236 Network of Schools Tarjan缩点
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22729 Accepted: 89 ...
- POJ-1236 Network of Schools,人生第一道Tarjan....
Network of Schools 题意:若干个学校组成一个计算机网络系统,一个学校作为出发端连接着若干个学校,信息可以传送到这些学校.被链接的学校不需要再次与出发端相连,现在问你:A:最少选几个学 ...
- POJ 1236 Network of Schools (Tarjan + 缩点)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 12240 Accepted: 48 ...
随机推荐
- 有状态的EJB对象和无状态的EJB对象
一,定义有状态Bean和无状态Bean 有状态Bean: @Stateful @Remote public class StatefulEjbBean implements StatefulEjb{ ...
- C#中图片.BYTE[]和base64string的转换
在C#中 图片到byte[]再到base64string的转换: Bitmap bmp = new Bitmap(filepath); MemoryStream ms = ...
- 【BZOJ1222】[HNOI2001]产品加工 DP
[BZOJ1222][HNOI2001]产品加工 Description 某加工厂有A.B两台机器,来加工的产品可以由其中任何一台机器完成,或者两台机器共同完成.由于受到机器性能和产品特性的限制,不同 ...
- 使用OpenSessionInViewFilter的注意事项
假设在你的应用中Hibernate是通过spring 来管理它的session.如果在你的应用中没有使用OpenSessionInViewFilter或者OpenSessionInViewInterc ...
- 九度OJ 1033:继续xxx定律 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4987 解决:1201 题目描述: 当n为3时,我们在验证xxx定律的过程中会得到一个序列,3,5,8,4,2,1,将3称为关键数, ...
- AsyncTask==Handler+Thread对比使用说明
AsyncTask能够合理且轻松使用UI线程,该类允许执行后台操作和发送结果到UI线程而不需要操作threads或handlers. AsyncTask是针对Thread和Handler代替而封装好的 ...
- 常见C C++问题(转)
这一部分是C/C++程序员在面试的时候会被问到的一些题目的汇总.来源于基本笔试面试书籍,可能有一部分题比较老,但是这也算是基础中的基础,就归纳归纳放上来了.大牛们看到一笑而过就好,普通人看看要是能补上 ...
- java基础之容器、集合、集合常用方法
一.容器(Collection):数组是一种容器,集合也是一种容器 java编程中,装其他各种各样的对象(引用类型)的一种东西,叫容器 注意: 1.数组的长度是固定的 2.集合:长度不固定, 可以随时 ...
- 利用wxpython显示OpenCV图像
核心代码 import wx, cv2 import numpy as np # Start with a numpy array style image I'll call "source ...
- 你不得不知的几款常用的在线API管理工具
在项目开发过程中,总会涉及到接口文档的设计编写,之前使用的都是ms office工具,不够漂亮也不直观,变更频繁的话维护成本也更高,及时性也是大问题.基于这个背景,下面介绍几个常用的API管理工具,方 ...