POJ 2168 Popular Cows
在zyh的高中,学生会每一年都会评选受欢迎学生,所谓受欢迎的学生,就是被所有学生喜欢的学生。 每个学生都喜欢自己,碰巧的是,如果学生A 喜欢学生B ,学生B喜欢学生C, 那么学生A也喜欢学生C。 但是学生A喜欢学生B 并不意味着学生B喜欢学生A。 zyh参与了评选工作,苦逼的他被安排去购买奖品,于是他拿到了一张表,这张表有m条记录,每条记录由两个数字a,b组成,表示a,喜欢b ,但是由于学生太多了,他无法知道会有多少个受欢迎的学生,从而无法去购买奖品,你能帮他解决吗?
Input
第1行:两个以空格分隔的整数,N和M. 第2行到第N+M行:两个以空格分隔的数字A和B,意味着A喜欢B。 1<=N<10,000 , 1 <= M <= 50,000.
Output
输出一个数-zyh所需购买的奖品数。
Sample Input
3 3 1 2 2 1 2 3
Sample Output
1
代码如下:
#include<cstdio>
#include<cstring>
#include<iostream>
#include<algorithm>
#include<queue>
#include<vector>
#define ll long long
#define inf 0x3f3f3f3f
#define N 10010
using namespace std;
int V;
vector<int>G[N];
vector<int>rG[N];
vector<int>vs;
bool used[N];
int cmp[N];
void add_edge(int from,int to){G[from].push_back(to);rG[to].push_back(from);
}
void dfs(int v){used[v]=true;for(int i=0;i<G[v].size();i++){if(!used[G[v][i]])dfs(G[v][i]);}vs.push_back(v);
}
void rdfs(int v,int k){used[v]=true;cmp[v]=k;for(int i=0;i<rG[v].size();i++){if(!used[rG[v][i]])rdfs(rG[v][i],k);}
}
int scc(){memset(used,0,sizeof(used));vs.clear();for(int v=0;v<V;v++){if(!used[v])dfs(v);}memset(used,0,sizeof(used));int k=0;for(int i=vs.size()-1;i>=0;i--){if(!used[vs[i]])rdfs(vs[i],k++);}return k;
}
int main(){int m,a,b;while(scanf("%d %d",&V,&m)!=EOF){for(int i=0;i<V;i++){G[i].clear();rG[i].clear();}for(int i=0;i<m;i++){scanf("%d %d",&a,&b);a--;b--;add_edge(a,b);}int n=scc();int u=0,num=0;for(int v=0;v<V;v++){if(cmp[v]==n-1){u=v;num++;}}memset(used,0,sizeof(used));rdfs(u,0);for(int v=0;v<V;v++){if(!used[v]){num=0;break;}}printf("%d\n",num);}return 0;
}
POJ 2168 Popular Cows相关推荐
- Poj 2186 Popular Cows(Tarjan 强连通缩点)
传送门:Poj 2186 题意:给你n头牛,m种关系,A牛认为B牛是popular的,B牛认为C牛是popular的,则A也认为C是popular的,问最终有几头被所有牛认为是popular的牛 题解 ...
- POJ 2186 Popular Cows(Tarjan)
http://poj.org/problem?id=2186 题意 :给你n头牛,m对关系,每对关系由两个编号组成,u和v代表着u认为v是受欢迎的,如果1认为2是受欢迎的,2认为3是受欢迎的,那1认为 ...
- POJ 2186 Popular Cows (强联通分量)
链接 :http://poj.org/problem?id=2186 一个联通分量里的所有的牛满足任何一个被其他牛认为是红人.强联通缩点之后 只需要找到一个且只有一个联通分量且它的出度为0 答案就是这 ...
- POJ 2186 Popular Cows
POJ_2186 这个题目其实就是求完强连通分量之后,判断一下出度为0的强连通分量是否唯一,如果唯一输出该强连通分量的点数,否则输出0. 由于之前求强连通分量的时候是把同一个强连通分量里的数放到一个数 ...
- POJ - 2186 Popular Cows(强连通缩点)
题目链接:点击查看 题目大意:给出n只奶牛,以及m组可传递的关系,每组关系给出一个a和一个b,表示为a->b,意思是奶牛a觉得奶牛b很酷,因为关系可传递,所以如果a->b且b->c, ...
- POJ 2186 Popular Cows(强连通分量缩点,Tarjan算法)
[题目链接] http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=16578 [解题报告] 给你一个有向图,问你有多少个点可以被其它 ...
- 二分搜索 POJ 2456 Aggressive cows
题目传送门 1 /* 2 二分搜索:搜索安排最近牛的距离不小于d 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #incl ...
- 洛谷——P2341 [HAOI2006]受欢迎的牛//POJ2186:Popular Cows
P2341 [HAOI2006]受欢迎的牛/POJ2186:Popular Cows 题目背景 本题测试数据已修复. 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所 ...
- Popular Cows POJ - 2186(tarjan算法)+详解
题意: 每一头牛的愿望就是变成一头最受欢迎的牛.现在有 N头牛,给你M对整数(A,B),表示牛 A认为牛B受欢迎.这种关系是具有传递性的,如果 A认为 B受欢迎, B认为 C受欢迎,那么牛 A也认为牛 ...
最新文章
- 注册页面所涉及的知识
- LightBus新浪微博客户端开源下载
- cad线性标注命令_CAD图纸中怎么进行线性标注
- 与股权投资有关的抵消分录的编制
- Linux系统学习----前言
- 永劫无间为啥显示连接服务器失败,永劫无间服务器故障怎么办?永劫无间服务器故障解决办法...
- Linux系统入门学习:在Debian或Ubuntu上安装完整的内核源码
- 心电图计算心率公式_心电图到底能反应啥问题,看过之后你也能当“医生”
- 您准备好观看GraphQL了吗?
- day3----python变量与常量
- stm32f7网口_STM32F7串口通信问题
- s5pv210 linux内核移植,S5PV210(TQ210)学习笔记——内核移植与文件系统构建之二
- 如何对物联网数据进行大数据分析
- AlexNet详解2
- vue个人学习(三)----组件
- VS+QT快速入门教程
- Spring Boot设置指定包的日志级别
- 通俗的解释机器学习的预测原理
- 《JavaEE黑马》 第一阶段 JavaSE基础 第一章
- 数字化到底有什么用?