受牛仰慕的牛(popular cows)
  每头牛都有一个梦想:成为一个群体中最受欢迎的名牛!在一个有N(1<=N<=10,000)头牛的牛群中,给你M(1<=M<=50,000)个二元组(A,B),表示A认为B是受欢迎的。既然受欢迎是可传递的,那么如果A认为B受欢迎,B又认为C受欢迎,则A也会认为C是受欢迎的,哪怕这不是十分明确的规定。你的任务是计算被所有其它的牛都喜欢的牛的个数。

这道题直接考虑模拟是不行的,要考虑抽象模型。将仰慕关系建立成一个有向图,然后计算出强连通分量,缩点之后计算每个点的出度,如果有且只有一个点的出度为0,那么这头牛存在,否则不存在。
  要注意的是,缩点之后输出答案的时候,输出的是这个点(强连通分量)所包含的点数。

这道题是老师拿给我练习强连通的练手题。在强连通的算法上可以看出我对细节的把握还是不纯熟。比如忘记赋值DFN和LOW数组,还有就是对题目的抽象模型的能力分析不熟,如果不是老师告诉我这是强连通的话我估计是没有办法知道这道题的正确解法的。
  下附代码,同样不知道那时候的我在干什么。

 #include <algorithm>
#include <iostream>
#include <fstream>
#include <cstring>
#include <cstdlib>
#include <cmath>
using namespace std;
ifstream fin("popular.in");
ofstream fout("popular.out");
struct ls
{
int nw;
int nxt;
};
ls qxx[];//链式前向星
int cows=,gx=,bian=,qlt=,cs=;
int qlts[]={};//每个强连通分量包含的点数
int DFN[]={},LOW[]={},tou[]={};
int outs[]={};//每个强连通分量的出度
int from[]={};//每个点所属的强连通分量
bool rz[]={};//每个点是否入栈
bool pd[][]={};//两个强连通分量之间是否相通
int zhan[]={},top=;
void add(int fr,int to);
void add2(int fr,int to);
void tarjan(int nw);
int main(void)
{
fin>>cows>>gx;
int a=,b=;
memset(tou,-,sizeof(tou));
for(int i=;i<=gx;i++)
{
fin>>a>>b;
add(a,b);
}
for(int i=;i<=cows;i++)
{
if(!DFN[i])tarjan(i);
}
int v=;
for(int i=;i<=cows;i++)
{
for(int j=tou[i];j>;j=qxx[j].nxt)
{
v=qxx[j].nw;
if(from[i]!=from[v]&&!pd[from[i]][from[v]])add2(from[i],from[v]);
}
}
int total=,ans=;
for(int i=;i<=qlt;i++)
{
if(outs[i]==)
{
total++;
ans+=qlts[i];
}
}
if(total==)fout<<ans;
else fout<<"";
return ;
} void add(int fr,int to)
{
bian++;
qxx[bian].nw=to;
qxx[bian].nxt=tou[fr];
tou[fr]=bian;
} void tarjan(int nw)
{
top++;
DFN[nw]=LOW[nw]=++cs;
zhan[top]=nw;
rz[nw]=true;
int v=;
for(int i=tou[nw];i>;i=qxx[i].nxt)
{
v=qxx[i].nw;
if(!DFN[v])
{
tarjan(v);
LOW[nw]=min(LOW[v],LOW[nw]);
}
else
{
if(rz[v]==true)
{
LOW[nw]=min(LOW[nw],DFN[v]);
}
}
}
if(DFN[nw]==LOW[nw])
{
qlt++;
do
{
v=zhan[top];
from[v]=qlt;
qlts[qlt]++;
rz[v]=false;
top--;
}while(nw!=v);
}
return;
} void add2(int fr,int to)
{
pd[fr][to]=true;
outs[fr]++;
return;
}

【POJ2186】受牛仰慕的牛的更多相关文章

  1. 不裸缩点》。。。POJ2186受欢迎的牛

    不裸缩点>...POJ2186受欢迎的牛 :first-child { margin-top: 0; } blockquote > :last-child { margin-bottom: ...

  2. poj2186强联通(牛仰慕)

    题意:       有一群老牛,他们之间有m组敬仰关系,关系可以传递,a仰慕b,b仰慕c,那么a就仰慕c,现在问被所有老牛都仰慕 的有多少? 思路:       想想,是不是一个环中的老牛的关系都是一 ...

  3. (转)牛牛牌型判定(五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛>没牛)

    牌型大小: 五小牛 > 五花牛 > 炸弹 > 银牛 > 牛牛 > 有牛(牛987654321) > 没牛,K > Q > J ……2 > A, 黑 ...

  4. [題解](縮點)luogu_P2341受歡迎的牛

    對於每個強聯通分量,這些牛一定都互相喜歡,所以縮點(我也不知道怎麼想到的) 接下來就是統計答案,最後縮成了一個DAG圖,如果這個點是明星的話,其他每個點一定直接或間接的鏈接這個點 也就是說其他點一定有 ...

  5. 七牛整合 ueditor (拦住那头牛,七牛又如何)

    最近遇到个项目,要求所有图片都必须整合到七牛上,看了把你谈文档踩在前辈们的基础上终于把他完成了,恰巧本屌丝最近刚好有时间,本着天下屌丝是一家的原则,和小朋友们一同学习 闲话少说入正题. 第一 :下载编 ...

  6. 牛客网 牛客练习赛43 F.Tachibana Kanade Loves Game-容斥(二进制枚举)+读入挂

    链接:https://ac.nowcoder.com/acm/contest/548/F来源:牛客网 Tachibana Kanade Loves Game 时间限制:C/C++ 1秒,其他语言2秒 ...

  7. 牛客网 牛客练习赛43 C.Tachibana Kanade Loves Review-最小生成树(并查集+Kruskal)+建虚点+读入挂

    链接:https://ac.nowcoder.com/acm/contest/548/C来源:牛客网 Tachibana Kanade Loves Review 时间限制:C/C++ 2秒,其他语言4 ...

  8. 牛客网 牛客练习赛43 B.Tachibana Kanade Loves Probability-快速幂加速

    链接:https://ac.nowcoder.com/acm/contest/548/B来源:牛客网 Tachibana Kanade Loves Probability 时间限制:C/C++ 1秒, ...

  9. 牛客网 牛客小白月赛12 B.华华教月月做数学-A^B mod P-快速幂+快速乘

    链接:https://ac.nowcoder.com/acm/contest/392/B来源:牛客网 华华教月月做数学 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32768K,其 ...

随机推荐

  1. 筛法求质——poj2262&2909

    这两道题都是哥赫巴德猜想的内容.基本的技术点都是在一个很大的数字范围里面求质数.直接判断两个数是不是质数,这种方法虽然可行但是还是很慢的.所以这两题我们使用打表! 而建立质数表的方法就是筛法求质,速度 ...

  2. Xml转化为DataTable

    /// <summary> /// XML转换为DataTable /// </summary> /// <param name="fileName" ...

  3. socket网络编程快速上手(二)——细节问题(3)

    3.SIGPIPE问题 人怕牺牲,我们写的程序也一样,人有死不瞑目,程序又何尝不是?程序跑着跑着,突然就崩掉了.好一点的牺牲前告诉你些打印,差点的也能用core文件等一些手段查出死在哪了,最惨不忍睹的 ...

  4. 兼容ie6的图片垂直居中

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. mysql 和 mongo db 语法对比

    本文描述了MySQL中的常用SQL语句在MongoDB中的写法,如果你长期使用MySQL而对MongoDB跃跃欲试,这篇简单的文章可以帮助你更快的进入角色.查询:MySQL:SELECT * FROM ...

  6. 软件快速开发平台 WebBuilder 6.8

    WebBuilder是一款开源的跨平台.数据库和浏览器的可视化Web应用快速开发平台.WebBuilder使用了多项最新的技术,使Web应用的开发更快捷和简单. 作为一款高效的Web开发工具,WebB ...

  7. SQL Server监控清单

    SQL Server监控清单 一. 服务器1. 状态监控(1) 服务器是否可访问?(2) 相应的数据库服务是否启用?(3) 操作系统事件日志中的错误或告警(4) 磁盘可用空间 服务器状态监控,不管使用 ...

  8. Python闭包详解

    Python闭包详解 1 快速预览 以下是一段简单的闭包代码示例: def foo(): m=3 n=5 def bar(): a=4 return m+n+a return bar >> ...

  9. 什么是LeapMotion

    LeapMotion预览——什么是LeapMotion LeapMotion预览 这个就是LeapMotion: 原文转自:   LeapMotion预览 LeapMotion 官网:http://l ...

  10. 11 款最好 CSS 框架

    11 款最好 CSS 框架 让你的网站独领风骚 网页设计和发展领域已经成为竞争激烈的虚拟世界.想要在网络的虚拟世界中生存,仅有一堆静止的在线网络应用是远远不够的,网页必须要有很多功能,配以让人无法抗拒 ...