题意:
      一些学校有一个发送消息的体系,现在给你一些可以直接发送消息的一些关系(单向)然后有两个问题
(1) 问你至少向多少个学校发送消息可以让所有的学校都得到消息
(2) 问至少加多少条边可以让所有学校达到消息互通(变成强连通图)

思路:
      比较简单了,我们先强连通所点,然后对于第一个问题,我们只要输出入度为0的个数,这个很好理解,对于第二个问题,我们可以输出max(入度为0的个数,出度为0的个数),这样做是因为我们可以吧度数大的先用小的补充上,剩下的就随意补充就行了,还有就是记得只有一个联通分量的时候特判一下,

PS :假如这个题目要是让输出解决方案的话也比较好弄,对于第一个,每个入度为0的点给一个,每个强连通分量《元素个数大于1的》给一个就行了。对于第二个,就是先用小的填充大的,剩下的零头随意安排。


#include<stdio.h>
#include<string.h>
#include<stack>#define N_node 100 + 10
#define N_edge 10000 + 100using namespace std;typedef struct
{int to ,next;
}STAR;typedef struct
{int a ,b;
}EDGE;EDGE edge[N_edge];
STAR E1[N_edge] ,E2[N_edge];
int list1[N_node] ,list2[N_node] ,tot;
int Belong[N_node] ,Cnt;
int mark[N_node];
stack<int>sk;void add(int a ,int b)
{E1[++tot].to = b;E1[tot].next = list1[a];list1[a] = tot;E2[tot].to = a;E2[tot].next = list2[b];list2[b] = tot;
}void DFS1(int s)
{mark[s] = 1;for(int k = list1[s] ;k ;k = E1[k].next){int to = E1[k].to;if(mark[to]) continue;mark[to] = 1;DFS1(to);}sk.push(s);
}void DFS2(int s)
{mark[s] = 1;Belong[s] = Cnt;for(int k = list2[s] ;k ;k = E2[k].next){int to = E2[k].to;if(mark[to]) continue;mark[to]  =1;DFS2(to);}
}int main ()
{int n ,i ,j ,a;while(~scanf("%d" ,&n)){memset(list1 ,0 ,sizeof(list1));memset(list2 ,0 ,sizeof(list2));tot = 1;int nowid = 0;for(i = 1 ;i <= n ;i ++){while(scanf("%d" ,&a) && a){add(i ,a);edge[++nowid].a = i;edge[nowid].b = a;}}memset(mark ,0 ,sizeof(mark));while(!sk.empty()) sk.pop();for(i = 1 ;i <= n ;i ++){if(!mark[i]) DFS1(i);}Cnt = 0;memset(mark ,0 ,sizeof(mark));while(!sk.empty()){int xin = sk.top();sk.pop();if(mark[xin]) continue;Cnt ++;DFS2(xin);}int d1[N_node] = {0};int d2[N_node] = {0};for(i = 1 ;i <= nowid ;i ++){int a = Belong[edge[i].a];int b = Belong[edge[i].b];if(a == b) continue;d1[a] ++ ,d2[b] ++;}int sum1 = 0 ,sum2 = 0;for(i = 1 ;i <= Cnt ;i ++){if(!d1[i]) sum1 ++;if(!d2[i]) sum2 ++;}if(Cnt == 1){printf("1\n0\n");continue;}printf("%d\n" ,sum2);sum1 > sum2 ? printf("%d\n" ,sum1) : printf("%d\n" ,sum2);}return 0;
}

POJ1236 强连通 (缩点后度数的应用)相关推荐

  1. HDU - 4685 Prince and Princess(强连通缩点+二分图完备匹配)

    题目链接:点击查看 题目大意:给出n个王子和m个公主,每个王子都有喜欢的公主,题目需要我们在尽可能多的王子可以匹配到喜欢的公主的情况下,求出每个王子所能娶的所有公主,必须保证王子娶了其中任何一个之后, ...

  2. POJ - 1904 King's Quest(强连通缩点)

    题目链接:点击查看 题目大意:给出n个王子和n个公主,每个王子都有喜欢的公主,每个王子初始时都娶到了一位喜欢的公主,题目需要我们求出每个王子所能娶的所有公主,必须保证王子娶了其中任何一个之后,其他的王 ...

  3. POJ2762 Going from u to v or from v to u? 强连通+缩点

    题目链接: poj2762 题意: 给出一幅单向图.问这张图是否满足   随意两点ab 都能 从a到达b 或  从b到达a 题解思路: 推断一幅图是否满足弱连通 首先想到的是将图中的 强连通分量(能互 ...

  4. Poj 2186 Popular Cows(Tarjan 强连通缩点)

    传送门:Poj 2186 题意:给你n头牛,m种关系,A牛认为B牛是popular的,B牛认为C牛是popular的,则A也认为C是popular的,问最终有几头被所有牛认为是popular的牛 题解 ...

  5. 2019ICPC(银川) - Delivery Route(强连通缩点+分块最短路)

    题目链接:点击查看 题目大意:给出n个点和m条边构成的图,每条边都有权值,其中m1条边是双向的,且权值非负,有m2条边是单向的,且权值可负,现在要求从给定起点st到其他每个点的最短路,若不存在路径则输 ...

  6. CodeForces - 894E Ralph and Mushrooms (强连通缩点+dp)

    题意:一张有向图,每条边上都有wi个蘑菇,第i次经过这条边能够采到w-(i-1)*i/2个蘑菇,直到它为0.问最多能在这张图上采多少个蘑菇. 分析:在一个强连通分量内,边可以无限次地走直到该连通块内蘑 ...

  7. 洛谷 P3387(缩点后+处理 )

    题目链接:https://www.luogu.com.cn/problem/P3387 分析: 我们需要找出一条点权最大的路径. 不限制点的个数,那么对于一个环上的点被选择了,一整条环都应该被选择. ...

  8. BZOJ1051 [HAOI2006]受欢迎的牛 Tarjan 强连通缩点

    欢迎访问~原文出处--博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ1051 题意概括 有n只牛,有m个羡慕关系. 羡慕关系具有传递性. 如果A羡慕B,B羡慕C,那么我们 ...

  9. POJ - 1236 Network of Schools(强连通缩点)

    题目链接:点击查看 题目大意:一个学校连接在一个计算机网络上,学校之间存在软件支援协议,每个学校都有它应支援的学校名单(学校A支援学校B,并不表示学校B一定支援学校A).当某校获得一个新软件时,无论是 ...

最新文章

  1. 【Linux】一步一步学Linux——Unix发展史(02)
  2. HDFS底层原理系列讲解之fsimage、editslog
  3. AWVS/Nessus/Burpsuite的简单使用
  4. 玩转spring MVC(九)---Spring Data JPA
  5. Java编程基础阶段笔记 day04 Java基础语法(下)
  6. Hadoop 使用FileSystem API 读取数据
  7. 成功通过pmp_这就是你为啥要学PMP!!!
  8. 字段与属性 关于类的封装 c# 1229
  9. 字符编码:ASCII,Unicode和UTF-8
  10. Windows server 2019 - Raid5 搭建+测试
  11. NestedScrollView嵌套ListView可行性总结
  12. matlab中arccosh,mathematica10下载
  13. Java LP1_Java Performance 总结(1. Class Loader)
  14. 高大上必备!D3.js对产品的贡献度剖析
  15. 牛逼!Python分析5万多场英雄联盟比赛,教你轻松预测胜负!
  16. Android 自定义和可下载字体
  17. 3dmax学习6——扫描命令
  18. 河南科技大学Oracle作业,机械制图作业集第四章答案河南科技大学.ppt
  19. oracle SCAN
  20. jupyter notebook中Nbextensions插件功能大全

热门文章

  1. kafka--storm--mongodb
  2. h5新增浏览器本地缓存localStorage
  3. Webwork 学习之路【08】结合实战简析Controller 配置
  4. js中的SetTimeOut
  5. Intelij idea工具设置片,用64位工作,用32位运行
  6. servlet与jsp的联系与区别
  7. iOS开发异常错误总结之——wait_fences: failed to receive reply: 10004003
  8. SQL查询案例:行列转换[行转列, 使用 CASE WHEN 处理]
  9. 后盾网lavarel视频项目---vue实现动态添加和删除板块
  10. JavaScript的几个概念简单理解(深入解释见You Don't know JavaScript这本书)