POJ2553 强连通出度为0的应用
题意:
给你一个有向图,然后问你有多少个满足要求的点,要求是: 这个点能走到的所有点都能走回这个点,找到所有的这样的点,然后排序输出。
思路:
可以直接一遍强连通缩点,所点之后出度为0的强连通点中所包含的点都是满足要求的,比较容易理解,在强连通里,所有点都能走回来,同时只要强连通所点后没有出度,那么就能保证里面的每个点到所有连接自己连接的点后都能走回来,还有就是这个题目我数组开到快 80000000了,还没MLE,这个我就不说什么了。
#include<stdio.h>
#include<string.h>
#include<stack>
#include<algorithm>
#define N_node 5001
#define N_edge 5000 * 5000 + 1
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] ,Ans[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 x)
{
mark[x] = 1;
for(int k = list1[x] ;k ;k = E1[k].next)
{
int to = E1[k].to;
if(mark[to]) continue;
DFS1(to);
}
sk.push(x);
}
void DFS2(int x)
{
mark[x] = 1;
Belong[x] = Cnt;
for(int k = list2[x] ;k ;k = E2[k].next)
{
int to = E2[k].to;
if(mark[to]) continue;
DFS2(to);
}
}
int main ()
{
int n ,m ,i ,a ,b;
while(~scanf("%d" ,&n) && n)
{
scanf("%d" ,&m);
memset(list1 ,0 ,sizeof(list1));
memset(list2 ,0 ,sizeof(list2));
tot = 1;
for(i = 1 ;i <= m ;i ++)
{
scanf("%d %d" ,&a ,&b);
edge[i].a = a ,edge[i].b = b;
add(a ,b);
}
memset(mark ,0 ,sizeof(mark));
while(!sk.empty()) sk.pop();
for(i = 1 ;i <= n ;i ++)
if(!mark[i]) DFS1(i);
memset(mark ,0 ,sizeof(mark));
Cnt = 0;
while(!sk.empty())
{
int xin = sk.top();
sk.pop();
if(mark[xin]) continue;
Cnt ++;
DFS2(xin);
}
memset(mark ,0 ,sizeof(mark));
for(i = 1 ;i <= m ;i ++)
{
a = Belong[edge[i].a];
b = Belong[edge[i].b];
if(a == b) continue;
mark[a] ++;
}
int nowid = 0;
for(i = 1 ;i <= n ;i ++)
if(!mark[Belong[i]]) Ans[++nowid] = i;
sort(Ans + 1 ,Ans + nowid + 1);
for(i = 1 ;i <= nowid ;i ++)
if(i == nowid) printf("%d\n" ,Ans[i]);
else printf("%d " ,Ans[i]);
}
return 0;
}
POJ2553 强连通出度为0的应用的更多相关文章
- POJ1236 (强连通分量缩点求入度为0和出度为0的分量个数)
Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 13804 Accepted: 55 ...
- POJ2186 (强连通分量缩点后出度为0的分量内点个数)
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27820 Accepted: 11208 De ...
- POJ 1236 Network Of Schools (强连通分量缩点求出度为0的和入度为0的分量个数)
Network of Schools A number of schools are connected to a computer network. Agreements have been dev ...
- poj2553 强连通缩点
The Bottom of a Graph Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 10114 Accepted: ...
- poj2553 强连通
题意:定义了一个图的底(bottom),是指在一个图中能够被所有点到达的点,问途中有哪些点是图的底. 首先是同一个强连通分量中的点都能够互相到达,强连通分量中一个点能到达其他点,也必然代表该强连通分量 ...
- POJ-2186 Popular Cows,tarjan缩点找出度为0的点。
Popular Cows 题意:一只牛崇拜另外一只牛,这种崇拜关系可以传导.A->B,B->C =>A->C.现在给出所有的关系问你有多少牛被其他所有的牛都崇拜. 思路:就是一 ...
- poj 1236 Network of Schools(连通图入度,出度为0)
http://poj.org/problem?id=1236 Network of Schools Time Limit: 1000MS Memory Limit: 10000K Total Su ...
- poj_2553 强连通分支&出度为0的点
题目大意 N个点的有向图中,定义“好点”为: 从该点v出发可以到达的所有点u,均有一条路径使得u可达v. 求出图中所有的“好点”,并按照顺序从小到大输出出来. 题目分析 图存在多个强连通分支,强连通分 ...
- poj2186 求有向图G中所有点都能到达的点的数量
/*题意:有向图,求这样的点的数量:所有点都能到达它.缩点成有向无环图,思:如果该强连通有出度,那么 从该出度出去的边必然回不来(已经缩点了),所以有出度的强连通必然不是.那么是不是所有出度为0的强连 ...
随机推荐
- pytorch(00)
pytorch入门到项目(-) 一.pytorch的环境 本身项目采用win10系统+pycharm+anaconda+cuda. 其中版本为 python 3.7 anaconda 5.3.1 cu ...
- .Net Core 处理跨域问题Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource
网页请求报错: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Or ...
- 一个把数据转化成Excel导出的程序 python Django
把从数据库查询出来数据导出 源码下载!!!!! 效果图 登入界面 主页面 查询到数据 导出 打开得到文件 项目地址,源码下载
- CVE-2014-4210 SSRF漏洞
Weblogic中存在一个SSRF漏洞,利用该漏洞可以发送任意HTTP请求,进而攻击内网中redis.fastcgi等脆弱组件. 修复方式: 1.删除server/lib/uddiexplorer.w ...
- Java 树结构实际应用 二(哈夫曼树和哈夫曼编码)
赫夫曼树 1 基本介绍 1) 给定 n 个权值作为 n 个叶子结点,构造一棵二叉树,若该树的带权路径长度(wpl)达到最小,称这样的二叉树为 最优二叉树,也称为哈夫曼树(Huffman Tree), ...
- 2.掌握numpy数组
一.改变数组形态 reshape()--通过改变数组的维度改变数组形态 import numpy as np Array=np.arange(1,17,1) Array Array_1=np.aran ...
- java例题_46 两个字符串拼接问题!
1 /*46 [程序 46 字符串连接] 2 题目:两个字符串连接程序,将两个字符串拼接在一起 3 */ 4 5 /*分析 6 * 两个字符串的拼接方法 7 * concat方式 8 * 当两个量都为 ...
- Python转义字符中'\'的个数问题
Python转义字符中''的个数问题 如果字符串里面有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r' '或者r" "表示''或" "内部 ...
- Java字节流和字符流,是时候总结一下IO流了
目录 从接收输入值说起 字节流读取 字符流读取 Scanner 读取 什么是 IO 流 字节流和字符流 字节流 字节输入流 字节输出流 缓冲流的原理 字符流 字符输入流 字符输出流 为什么字符流需要 ...
- 带你全面认识CMMI V2.0(一)
新发布的CMMI V2.0在方法论和方法上都提出了一些战略上的变化和改进.这些更新提供了新的要求.历史标准的演进以及以往实践的延续. CMMI V2.0和CMMI V1.3的变化 CMMIV2.0的定 ...