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是红人: 该关系 ...
随机推荐
- [React] Persist Form Data in React and Formik with formik-persist
It can be incredibly frustrating to spend a few minutes filling out a form only to accidentally lose ...
- react map 遍历
1.map方法 注:map 返回的是一个新数组 class App extends Component { // constructor(props) { // super(props); // th ...
- React 组件开发注意事项
0.state的设定原则,如果render里用不到,则就不应该是一个state. 1.数组遍历时,用每一条数据的唯一标识作为key,尽量不要使用遍历的索引值作为key,如果它们从不重新排序,它们工作也 ...
- 简单使用 Mvc 内置的 Ioc
简单使用 Mvc 内置的 Ioc 本文基于 .NET Core 2.0. 鉴于网上的文章理论较多,鄙人不才,想整理一份 Hello World(Demo)版的文章. 目录 场景一:简单类的使用 场景二 ...
- 诊断并解决 ORA-4030 错误 (Doc ID 1548826.1)
适用于: Oracle Database - Enterprise Edition - 版本号 8.1.7.4 和更高版本号 本文档所含信息适用于全部平台 用途 怎样诊断 ORA-4030 错误 排错 ...
- ArcGIS 10.3 for Server新特性介绍
ArcGIS10.3的正式版立即在美国Esri全球用户大会推出.中国的正式发行时间预计在Esri中国的用户大会.以下就将用户比較关心的ArcGIS 10.3 for Server的新特性给大家进行简单 ...
- ActionFilterAttribute之HtmlFilter,压缩HTML代码
当开启这个过滤器后,最终生成的HTML代码将会被压缩一下,在流量很大的网站中,能减少带宽成本就减少一点,何乐而不为? [csharp] view plaincopy using System; usi ...
- oracle问题系列 : ORA-02290: 违反检查约束条件
报错如下: ### Error updating database. Cause: java.sql.SQLIntegrityConstraintViolationException: ORA-022 ...
- JavaScript 检查 email 地址的正则表达式
JavaScript 检查 email 地址的正则表达式1.代码(1)<html><head><title>Checking an email address - ...
- Nhibernate开发中遇见的问题列表
1.No persister for: LantrackCommon.pentity.BASESTANDARD 解答修改方法:我的是因为映射关系文件在属性里的生成操作设置成:嵌入的资源.