题意:

      一些学校有一个发送消息的体系,现在给你一些可以直接发送消息的一些关系(单向)然后有两个问题

(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 + 100 using 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. poj1236强连通缩点

    题意:给出每个学校的list 代表该学校能链接的其他学校,问1:至少给几个学校资源使所有学校都得到:2:至少加多少个边能让所有学校相互连通: 思路:1:找出缩点后入度为零的点个数  2:找出缩点后入度 ...

  2. poj1236 强连通缩点

    Network of Schools Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 15211   Accepted: 60 ...

  3. POJ 1236 学校传数据 强连通+缩点+DAG

    题意描述: 网络中有一些学校,每个学校可以分发软件给其他学校.可以向哪个分发取决于他们各自维护的一个清单. 两个问题 1:至少要copy多少份新软件给那些学校, 才能使得每个学校都能得到. 2:要在所 ...

  4. poj2186 强连通缩点

    Popular Cows Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 29773   Accepted: 12080 De ...

  5. HDU5934 Bomb(2016杭州CCPC第二题)(强连通缩点)

    Bomb Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Submis ...

  6. poj1236 强连通

    题意:有 n 个学校每个学校可以将自己的软件共享给其他一些学校,首先,询问至少将软件派发给多少学校能够使软件传播到所有学校,其次,询问添加多少学校共享关系可以使所有学校的软件能够相互传达. 首先,第一 ...

  7. HDU-4635 Strongly connected 强连通,缩点

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4635 题意:给一个简单有向图(无重边,无自环),要你加最多的边,使得图还是简单有向图... 先判断图是 ...

  8. poj 3177 Redundant Paths【求最少添加多少条边可以使图变成双连通图】【缩点后求入度为1的点个数】

    Redundant Paths Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11047   Accepted: 4725 ...

  9. poj1236 SCC+缩点

    /* 强连通分量内的点可以互相传送,可以直接缩点 缩点后得到一棵树 第一问的答案是零入度点数量, 第二问: 加多少边后变成强连通图 树上入度为0的点有p个,出度为0的点为q,那么答案就是max(p,q ...

随机推荐

  1. redis使用ssh密钥远控靶机

      首先说明一下我们的实验目的,我们这个实验需要利用一种公有密码,将公有密钥写入要攻击的服务器的redis数据库,然后使用我们自己的私钥进行远控肉鸡的操作. 实验环境:centos7(靶机,版本无太大 ...

  2. 修改 Hosts 解决 Github 访问缓慢问题

    背景 最近访问 Github 经常出现访问速度慢的问题,甚至会出现无法连接的情况.有一天,在一次家常聊天中提到了这个事情,有一位热心的 Gitee 朋友就说:你改一下 Hosts 文件就可以了.修改了 ...

  3. Jmeter性能常见问题集锦

    1. java.net.BindException: Address already in use: connect 开始以为是单机运行脚本运行不过来,所以另加了一台负载机同时运行脚本 分布式环境部署 ...

  4. 单链表及基本操作(C语言)

    #include <stdio.h> #include <stdlib.h> /** * 含头节点单链表定义及基本操作 */ //基本操作函数用到的状态码 #define TR ...

  5. mobx 的学习

    1.初始化项目 第一步用create-react-app初始化一个项目,并打开webpack配置项 npx create-react-app react-mobx-demo cd react-mobx ...

  6. 关于mysql事物和特性

    事务的 四个特征(ACID) 事务具有四个特征:原子性( Atomicity ).一致性( Consistency ).隔离性( Isolation )和持续性( Durability ).这四个特性 ...

  7. Docker的深入浅出

    定义: Docker是一个虚拟环境容器,可以将你的开发环境.代码.配置文件等一并打包到这个容器中,并发布和应用到任意平台中. 原理: docker底层使用了LXC来实现,LXC将linux进程沙盒化, ...

  8. 了解 Vue 的 Compsition API

    在这篇文章中,我将讲讲 Vue 的 Composition API 为什么比之前的 Options API 要好,以及它是如何工作的. Options API 有什么问题 首先,这里不是要大家放弃 O ...

  9. greenplum6.14、GPCC6.4安装详解

    最近在做gp的升级和整改,所以把做的内容整理下,这篇文章主要是基于gp6.14的安装,主要分为gp,gpcc,pxf的一些安装和初始化.本文为博客园作者所写: 一寸HUI,个人博客地址:https:/ ...

  10. 关于误删除elasticSearch 索引,怎么能快速找回?

    背景 之前公司小王在工作中清理elasticSearch 索引,不小心使用脚本清空了最近使用的重要索引,导致开发无法准确的进行定位生产问题,造成了很大困扰. 当时我们的生产环境中是这样配置日志系统的: ...