最受欢迎的牛 usaco
题面网上到处都是;
主要来谈谈怎么做,首先利用tarjan求强连通分量缩点,缩点后找到出度为0的点,若不止一个,则输出0,否则输出这个点包含的缩点前的点的个数;
为什么这么做,是由这道题的问法决定的,若最后求出的出度为0的点有多个,可以肯定一定没有所求的牛;
代码:
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<string>
#include<algorithm>
using namespace std;
const int maxn=;
int n,m;
int pre[maxn],low[maxn],sccno[maxn],scc_cnt=,dfs_clock=,z[maxn],top=,out[maxn];
bool b[maxn][maxn];
struct node{
int y,next;
}e[maxn<<];
int linkk[maxn],len=;
void insert(int x,int y){
e[++len].y=y;
e[len].next=linkk[x];
linkk[x]=len;
}
void dfs(int x){
pre[x]=low[x]=++dfs_clock;
z[++top]=x;
for(int i=linkk[x];i;i=e[i].next){
if(!pre[e[i].y]){
dfs(e[i].y);
if(low[e[i].y]<low[x])low[x]=low[e[i].y];
}
else if(!sccno[e[i].y])
low[x]=min(low[x],pre[e[i].y]);
}
if(low[x]==pre[x]){
scc_cnt++;
while(true){
sccno[z[top]]=scc_cnt;
if(z[top]==x){top--;break;}
top--;
}
}
}
void print(int x){printf("%d\n",x);exit();}
void init(){
scanf("%d%d",&n,&m);
int x,y;
for(int i=;i<=m;i++){
scanf("%d%d",&x,&y);
insert(x,y);
}
}
void slove(){
for(int i=;i<=n;i++)if(!pre[i])dfs(i);
int x,y;
for(int j=;j<=n;j++)
for(int i=linkk[j];i;i=e[i].next){
x=sccno[j],y=sccno[e[i].y];
if(x==y||b[x][y])continue;
b[x][y]=;out[x]++;
}
int k=;
for(int i=;i<=scc_cnt;i++){
if(!out[i]&&k){k=-;break;}
if(!out[i]&&!k)k=i;
}
if(k==-)print();
int sum=;
for(int i=;i<=n;i++)if(sccno[i]==k)sum++;
print(sum);
}
int main(){
init();
slove();
return ;
}
最受欢迎的牛 usaco的更多相关文章
- 连通图 poj2186 最受欢迎的牛(求最受欢迎的牛的数量)
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27531 Accepted: 11077 De ...
- bzoj1051 [HAOI2006]受欢迎的牛
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4773 Solved: 2541[Submit][Sta ...
- bzoj 1051 (强连通) 受欢迎的牛
题目:这里 题意: Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为 ...
- BZOJ 1051 最受欢迎的牛 解题报告
题目直接摆在这里! 1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 4438 Solved: 2353[S ...
- 【BZOJ1051】1051: [HAOI2006]受欢迎的牛 tarjan求强连通分量+缩点
Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这种关系是具有传递性的,如果A认为B受欢迎,B认为C受欢迎,那么牛A也认 ...
- 【bzoj1051】 [HAOI2006]受欢迎的牛 tarjan缩点判出度算点数
[bzoj1051] [HAOI2006]受欢迎的牛 2014年1月8日7450 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B ...
- 【BZOJ】1051: [HAOI2006]受欢迎的牛(tarjan)
http://www.lydsy.com/JudgeOnline/problem.php?id=1051 这题还好-1A了..但是前提还是看了题解的 囧.....一开始认为是并查集,oh,不行,,无法 ...
- BZOJ 1051 受欢迎的牛(Tarjan缩点)
1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 4573 Solved: 2428 [Submit][S ...
- [bzoj1051] [HAOI2006]受欢迎的牛 (Tarjan+缩点)
强连通图,缩点 Description 每一头牛的愿望就是变成一头最受欢迎的牛.现在有N头牛,给你M对整数(A,B),表示牛A认为牛B受欢迎. 这 种关系是具有传递性的,如果A认为B受欢迎,B认为C受 ...
随机推荐
- ylb:SQL 系统函数
ylbtech-SQL Server: SQL Server-SQL 系统函数 SQL 系统函数 1,ylb:SQL 系统函数 返回顶部 -- ============================ ...
- SilverLight-Access:银光项目测试数据类列表
ylbtech-SilverLight-Access:银光项目测试数据类列表 1.A, Product.cs 产品类 1.A, Product.cs 产品类返回顶部 1,/Access/Product ...
- Android WiFi开发教程(一)——WiFi热点的创建与关闭
相对于BlueTooth,WiFi是当今使用最广的一种无线网络传输技术, 几乎所有智能手机.平板电脑和笔记本电脑都支持Wi-Fi上网.因此,掌握基本的WiFI开发技术是非常必要的.本教程将围绕一个小D ...
- HDU2550 百步穿杨
百步穿杨 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submi ...
- 2016.11.25 activiti的配置文件解析
参考来自activiti的用户手册. activiti的配置文件解析 1.processEngine的配置 注意,单独创建流程引擎与spring方式创建流程引擎是不一样的,区别在于:process ...
- HTML5 Canvas 绘制佛教万字
代码如下: <!DOCTYPE html> <html lang="utf-8"> <meta http-equiv="Content-Ty ...
- Java enum枚举的使用方法
一. 出现背景: 在JDK1.5之前,我们定义常量是这种:public static final String RED = "RED"; 在JDK1.5中增加了枚举类型,我们能够把 ...
- VueJS组件通过props自定义事件
父组件是使用 props 传递数据给子组件,但如果子组件要把数据传递回去,就需要使用自定义事件! 我们可以使用 v-on 绑定自定义事件, 每个 Vue 实例都实现了事件接口(Events inter ...
- 添加w3c验证图片到网站
1.在http://validator.w3.org/网站验证 2.添加验证通过后的代码至自己的网站 类似<p> <a href="http://validator. ...
- java 方法重写原则
方法重写应遵循“三同一小一大”原则: “三同”:即方法名相同,形参列表相同,返回值类型相同: “一小”:子类方法声明抛出的异常比父类方法声明抛出的异常更小或者相等: “一大”:子类方法的访问修饰符应比 ...