poj2186【利用强连通分量】
题意:
有n头奶牛,然后有个规则是A->B,B->C,那么A->C;
A觉得B受欢迎,B觉得C受欢迎,那么A觉得C受欢迎;
求:被其他所有牛都欢迎的牛的数量;
思路:
原来的思路:
我们只要在缩点之后的图中,找出出度为0的点,然后输出它里面的点就可以了。【虽然AC了】
然后我觉得这样不是会有缺陷么?他可能入度也为0呢?也就是缩点后那个出度为0点是独立的。所以还是要判断入度吧。
后来其实没必要入度,我们继续查看其他出度为0的点,如果存在的话那肯定是有独立的部分,然后如果没有的话,嘿嘿,那么肯定就是他了。
总结:
利用tarjan算法可以办到缩点。
然后主要的思路就是:在一张图里面,经过缩点后,出度为0的点只有一个的话,那么他肯定被其他点在一定程度上给盯上了。
—————————————歌:飞得更高–汪峰
//#include <bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<math.h>
#include<string.h>
#include<algorithm>
using namespace std;
typedef long long LL;
typedef unsigned long long ULL;
const double eps=1e-6;
const double pi=acos(-1.0);
const int mod=998244353;
const int INF=0x3f3f3f3f;
const int N=1e4+8;
struct asd{
int to;
int next;
};
asd q[N*5];
int head[N*5],tol;
int n;
int dfn[N];
int low[N];
int st[N],vis[N],in[N];
int p,tp,sum;
int kr[N];
int xx[N];
void INIT()
{
tol=0;
memset(head,-1,sizeof(head));
}
void add(int a,int b)
{
q[tol].to=b;
q[tol].next=head[a];
head[a]=tol++;
}
void tarjan(int u)
{
dfn[u]=low[u]=++p;
st[++tp]=u;
vis[u]=1;
for(int i=head[u];i!=-1;i=q[i].next)
{
int x=q[i].to;
if(!dfn[x]){
tarjan(x);
low[u]=min(low[u],low[x]);
}
else if(vis[x]){
low[u]=min(low[u],dfn[x]);
}
}
if(dfn[u]==low[u]){
int temp;
sum++;
while(1){
temp=st[tp];
in[temp]=sum;
vis[temp]=0;
tp--;
if(temp==u){
break;
}
}
}
}
void solve()
{
memset(kr,0,sizeof(kr));
memset(xx,0,sizeof(xx));
for(int i=1;i<=n;i++){
for(int v=head[i];v!=-1;v=q[v].next){
int t=q[v].to;
if(in[t]!=in[i]){
kr[in[i]]++;
}
}
}
int ans=0,num=0,k;
for(int i=1;i<=sum;i++){
if(!kr[i]){
num+=1;
k=i;
}
}
if(num==1){
for(int i=1;i<=n;i++)
{
if(in[i]==k){
ans++;
}
}
printf("%d\n",ans);
}
else{
puts("0");
}
}
int main()
{
int a,b,m;
scanf("%d%d",&n,&m);
INIT();
while(m--){
scanf("%d%d",&a,&b);
add(a,b);
}
tp=p=sum=0;
memset(vis,0,sizeof(vis));
memset(low,0,sizeof(low));
for(int i=1;i<=n;i++)
{
if(!dfn[i]){
tarjan(i);
}
}
solve();
return 0;
}
poj2186【利用强连通分量】的更多相关文章
- POJ2186(强连通分量分解)
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 35035 Accepted: 14278 De ...
- POJ2186 (强连通分量缩点后出度为0的分量内点个数)
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 27820 Accepted: 11208 De ...
- 强连通分量tarjan缩点——POJ2186 Popular Cows
这里的Tarjan是基于DFS,用于求有向图的强联通分量. 运用了一个点dfn时间戳和low的关系巧妙地判断出一个强联通分量,从而实现一次DFS即可求出所有的强联通分量. §有向图中, u可达v不一定 ...
- 强连通分量+poj2186
强连通分量:两个点能够互相连通. 算法分解:第一步.正向dfs全部顶点,并后序遍历 第二步,将边反向,从最大边dfs,构成强连通分量 标号最大的节点属于DAG头部,cmp存一个强连通分量的拓扑序. p ...
- POJ2186 Popular Cows(强连通分量)
题目问一个有向图所有点都能达到的点有几个. 先把图的强连通分量缩点,形成一个DAG,那么DAG“尾巴”(出度0的点)所表示的强连通分量就是解,因为前面的部分都能到达尾巴,但如果有多个尾巴那解就是0了, ...
- POJ2186 Popular Cows 强连通分量tarjan
做这题主要是为了学习一下tarjan的强连通分量,因为包括桥,双连通分量,强连通分量很多的求法其实都可以源于tarjan的这种方法,通过一个low,pre数组求出来. 题意:给你许多的A->B ...
- POJ2186 Popular Cows 【强连通分量】+【Kosaraju】+【Tarjan】+【Garbow】
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 23445 Accepted: 9605 Des ...
- POJ2186 强连通分量+缩点
Popular Cows Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 40234 Accepted: 16388 De ...
- POJ2186 Popular Cows 题解 强连通分量入门题
题目链接:http://poj.org/problem?id=2186 题目大意: 每头牛都想成为牛群中的红人. 给定N头牛的牛群和M个有序对(A, B),(A, B)表示牛A认为牛B是红人: 该关系 ...
随机推荐
- 搭建企业内部DNS服务器,docker 部署内部 dnsmasq
获取镜像 docker pull jpillora/dnsmasq 配置域名 # http://oss.segetech.com/intra/srv/dnsmasq.conf #log all dns ...
- Go与C语言的互操作 cgo
http://tonybai.com/2012/09/26/interoperability-between-go-and-c/ // foo.h int count; void foo(); //f ...
- [java][db]JAVA分布式事务原理及应用
JTA(Java Transaction API)同意应用程序运行分布式事务处理--在两个或多个网络计算机资源上訪问而且更新数据.JDBC驱动程序的JTA支持极大地增强了数据訪问能力. 本文的目的是 ...
- C#语言 循环语句
//Console.Write("请输入关卡数:"); //int a = int.Parse(Console.ReadLine()); //int s = 0; //if (a ...
- vim字符串替换命令
呜呜老是忘. 这里记录一下,仅仅记录当中日经常使用的最多的命令. :%s/str1/str2/g 替换每一行中全部str1为str2 经常使用! :s/str1/str2/g 替换当前行全部str ...
- Codeforces Round #148 (Div. 1)
A wool sequence 表示一个序列中能够找到一个连续的子区间使得区间异或值为0 那么求的是不含这样的情况的序列个数 题目中数据范围是.在0~2^m - 1中选n个数作为一个序列 n和m都是1 ...
- OpenStack源码系列---nova-api
OpenStack源码实际上是比较规范的,但是对刚刚接触到源代码的人来说,却感觉有点混乱.我刚开始的时候也常常搞乱,比如service.Service类继承自openstack.common.serv ...
- 拒绝干扰 解决Wi-Fi的最大问题
本文转载至:http://www.ciotimes.com/net/rdjs/WI-FI/201006301920.html 射频干扰英文:RFI,(Radio Frequency Interfere ...
- appium部分api
转自:http://www.aichengxu.com/view/41510 使用的语言是java,appium的版本是1.3.4,java-client的版本是java-client-2.1.0,建 ...
- PHP琐碎学习
在子类中如果定义了__construct则不会调用父类的__construct,如果需要同时调用父类的构造函数,需要使用parent::__construct()显式的调用. class Car { ...