/*

题目:

现给出各位选手的能力比较并给出自己的朋友的参赛号码,如何组织比赛使得自己的朋友能够获胜

分析:

各选手能力比较可以构造一个有向图,而想要使得自己的朋友要赢得比赛,所以他的所在的连通块

必定是入度为0的(假设建图时是以能力大的人作为边的起点)。所以题目可以转换为先建图,然后

再找连通块求缩点,然后判断该缩点是否入度为0,若有朋友在该连通块中,即可判断可以组织这样

的一场比赛。而判断朋友在不在该连通块中,可以先求到所有的入度为0的连通块用数组置为true,

然后直接把所有朋友的所在的连通块置为false,若所有的连通块中只要还有true的连通块,就可判断

不能组织这样的一场比赛

*/

#include <cstdio>

#include <cstring>

const int X = 100005;

int dfn[X],low[X],stack[X],deg[X],father[X],depth,top,bcnt;

int f[X],fri,n,m;

bool use[X],instack[X];

struct node

{

int v;

node *next;

void fun()

{

v = 0;

next = NULL;

}

}edge[X],*head[X],*tmp;

void tarjan(int u)

{

int v;

dfn[u] = low[u] = ++depth;

stack[++top] = u;

instack[u] = true;

for(node *p=head[u];p;p=p->next)

{

v = p->v;

if(!low[v])

{

tarjan(v);

if(low[v]<low[u])

low[u] = low[v];

}

else if(instack[v]&&low[u]>dfn[v])

low[u] = dfn[v];

}

if(low[u]==dfn[u])

{

bcnt++;

do

{

v = stack[top--];

instack[v] = false;

father[v] = bcnt;

}while(u!=v);

}

}

void solve()

{

memset(instack,false,sizeof(instack));

memset(low,0,sizeof(low));

memset(deg,0,sizeof(deg));

depth = bcnt = top = 0;

for(int i=1;i<=n;i++)

if(!low[i])

tarjan(i);

for(int i=1;i<=n;i++)

for(node *p=head[i];p;p=p->next)

if(father[i]!=father[p->v])

deg[father[p->v]]++;

memset(use,false,sizeof(use));

for(int i=1;i<=bcnt;i++)

if(!deg[i])

use[i] = true;

for(int i=0;i<fri;i++)

use[father[f[i]]] = false;

bool flag = true;

for(int i=1;i<=bcnt;i++)

if(use[i])

{

flag = false;

break;

}

flag?printf("yes\n"):printf("no\n");

}

int main()

{

freopen("sum.in","r",stdin);

freopen("sum.out","w",stdout);

while(scanf("%d%d%d",&n,&fri,&m),n||m||fri)

{

for(int i=0;i<fri;i++)

scanf("%d",&f[i]);

memset(head,NULL,sizeof(head));

for(int i=0;i<m;i++)

edge[i].fun();

tmp = edge;

int u,v;

for(int i=0;i<m;i++)

{

scanf("%d%d",&u,&v);

tmp->next = head[u];

tmp->v = v;

head[u] = tmp++;

}

solve();

}

return 0;

}

转载于:https://www.cnblogs.com/yejinru/archive/2012/05/18/2507973.html

hoj 3005 Game Rigging 强联通分量求缩点相关推荐

  1. [HDOJ6165] FFF at Valentine(强联通分量,缩点,拓扑排序)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6165 题意:问一个有向图中是否有任意两点可以到达. 读错题就彻底输了,读成判断是否有任意条路,使得经过 ...

  2. HDU6072(Kosaraju求强联通分量+位运算)

    题意:给你n个点,和一个n*n的01矩阵表示边,有m次询问,问更改k条边后的强连通分量. 题解:对于每个询问,求出强连通分量,那么一个点数为t的强连通分量对答案的贡献为 t(t−1)2 \frac{t ...

  3. BZOJ 2140 稳定婚姻(强联通分量判环)【BZOJ修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2140 是 hydro 的 BZOJ ...

  4. P3387-【模板】缩点【tarjan,强联通分量,DAGdp】

    正题 评测记录: https://www.luogu.org/recordnew/lists?uid=52918&pid=P3387 大意 一个有向图.每个点有权值,但每个值只能取一次,每条边 ...

  5. Tarjan的强联通分量

    求强联通分量有很多种. <C++信息学奥赛一本通>  中讲过一个dfs求强联通分量的算法Kosdaraju,为了骗字数我就待会简单的说说.然而我们这篇文章的主体是Tarjan,所以我肯定说 ...

  6. 关于强联通分量 的求法讨论

    这个讨论主要是关于 HA2006年最受欢迎的牛 的讨论 . 尽管这道题对于很多dalao来说都觉得是模板题,但是仍是值得思考的,因为我第一次写这道题的时候, 缩完点之后建图建错玄学跑dfs n^2做法 ...

  7. [vios1023]维多利亚的舞会3强联通分量tarjan

    题目链接:https://vijos.org/p/1023 最近在练强联通分量,当然学的是tarjan算法 而这一道题虽然打着难度为3,且是tarjan算法的裸题出没在vijos里面 但其实并不是纯粹 ...

  8. [图论]强联通分量+缩点 Summer Holiday

    Summer Holiday Description 听说lcy帮大家预定了新马泰7日游,Wiskey真是高兴的夜不能寐啊,他想着得快点把这消息告诉大家,虽然他手上有所有人的联系方式,但是一个一个联系 ...

  9. CodeForces 1213F (强联通分量分解+拓扑排序)

    传送门 •题意 给你两个数组 p,q ,分别存放 1~n 的某个全排列: 让你根据这两个数组构造一个字符串 S,要求: (1)$\forall i \in [1,n-1],S_{pi}\leq S _ ...

最新文章

  1. java url路径包含中文_谈谈 Java 类加载机制
  2. include_once 问题
  3. 再谈javascript图片预加载经典技术
  4. AngularJS内置指令
  5. sharepoint 2013 自定义列表eventhandle权限控制
  6. 单片机模块学习之LED
  7. POJ - 1741 Tree(点分治模板题)
  8. 【python】数据结构和算法 + 浅谈单链表与双链表的区别
  9. 重庆大学c语言程序设计基础,c语言程序设计基础黄文胜
  10. HustOJ 基础搭建教程
  11. 死锁、CPU飙高、内存泄漏、内存溢出、栈溢出 问题定位及解决方法汇总
  12. R 中 facet_wrap() 和 facet_grid() 的区别
  13. python制作电脑软件_python制作一个桌面便签软件 -电脑资料
  14. c语言窗口插入图片,c语言添加图片Word版
  15. 英文状态下输入字母,字母之间的间隔较大怎么解决?
  16. 京东到家话费券系统NIO实战
  17. 别再跟面试官说你不懂什么是 IP 协议了
  18. 设计模式 —— Builder 模式
  19. 如何查看Win11可以升级22h2?Win11升级22h2的方法
  20. 产品运营数据分析框架应该包含哪些重要指标?

热门文章

  1. d029: 求出2-100之间的所有质数(素数)
  2. C# 读取ini文件 百度问问学习文档
  3. poj 1016 Numbers That Count【字符串】
  4. asp.net 获取 当前日期时间 及 前后N天日期时间(DropDownList数据绑定)
  5. plsql连接oracle报错12514,plsql 登录 oracle11 12514 错误的处理方法
  6. 用c语言写扫雷游戏倒计时代码,课内资源 - 基于VS2013实现的扫雷小游戏
  7. mysql配置及其使用
  8. 《剑指Offer》题一~题十
  9. 湖南省第6届程序大赛第3题 数字整除
  10. 模拟器中文输入法设置