【codevs2822】爱在心中

2014年1月26日5580

题目描述 Description

“每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动。爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home。”

在爱的国度里有N个人,在他们的心中都有着一个爱的名单,上面记载着他所爱的人(不会出现自爱的情况)。爱是具有传递性的,即如果A爱B,B爱C,则A也爱C。
如果有这样一部分人,他们彼此都相爱,则他们就超越了一切的限制,用集体的爱化身成为一个爱心天使。
现在,我们想知道在这个爱的国度里会出现多少爱心天使。而且,如果某个爱心天使被其他所有人或爱心天使所爱则请输出这个爱心天使是由哪些人构成的,否则输出-1。

输入描述 Input Description

第1行,两个数N、M,代表爱的国度里有N个人,爱的关系有M条。
第2到第M+1行,每行两个数A、B,代表A爱B。

输出描述 Output Description

第1行,一个数,代表爱的国度里有多少爱心天使。
第2行,如果某个爱心天使被其他所有人和爱心天使所爱则请输出这个爱心天使是由哪些人构成的(从小到大排序),否则输出-1。

样例输入 Sample Input

样例输入1:

6 7
1 2
2 3
3 2
4 2
4 5
5 6
6 4
样例输入2:

3 3
1 2
2 1
2 3

样例输出 Sample Output

样例输出1:

2
2 3

样例输出2:

1
-1

代码

#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <queue>
#include <typeinfo>
#include <map>
#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
#define inf 10000000
inline ll read()
{ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
//***************************************************************struct ss
{int u,to,next;
} e[50001];
int out[40001];
int head[50001],vis[50001],dfn[50001],low[50001],belong[50001],hav[50001];
int q[50001],inq[50001];
int t=1,bcnt,cnt,n,m,top;
void add(int u,int v)
{e[t].to=v;e[t].u=u;e[t].next=head[u];head[u]=t++;
}
void dfs(int u)
{vis[u]=inq[u]=1;low[u]=dfn[u]=++cnt;q[++top]=u;for(int i=head[u]; i; i=e[i].next){if(!vis[e[i].to]){dfs(e[i].to);low[u]=min(low[u],low[e[i].to]);}else if(inq[e[i].to])low[u]=min(low[u],dfn[e[i].to]);}int v=-1;if(low[u]==dfn[u]){bcnt++;while(v!=u){v=q[top--];inq[v]=0;belong[v]=bcnt;hav[bcnt]++;}}
}
void rebuild()
{for(int i=1; i<=m; i++){if(belong[e[i].u]!=belong[e[i].to]){out[belong[e[i].u]]++;}}
}
void tarjan()
{for(int i=1; i<=n; i++){if(!vis[i]){dfs(i);}}rebuild();
}
void work()
{int res=0;int ans;for(int i=1; i<=bcnt; i++){if(out[i]==0){ans=i;res++;}}int bb=0;for(int i=1;i<=bcnt;i++){if(hav[i]>=2)bb++;}cout<<bb<<endl;if(res==1){if(hav[ans]!=1){int kk=0;int hh[50001];for(int i=1; i<=n; i++){if(belong[i]==ans){hh[++kk]=i;}}for(int i=1; i<kk; i++){printf("%d ",hh[i]);}cout<<hh[kk]<<endl;}else cout<<-1<<endl;}else cout<<-1<<endl;
}
int main()
{int u,v;scanf("%d%d",&n,&m);for(int i=1; i<=m; i++){scanf("%d%d",&u,&v);add(u,v);}tarjan();work();return 0;
}

转载于:https://www.cnblogs.com/zxhl/p/4730923.html

【codevs2822】爱在心中 tarjan 缩点+理解相关推荐

  1. Codevs2822 爱在心中

    2822 爱在心中 时间限制: 1 s  空间限制: 128000 KB  题目等级 : 钻石 Diamond  题目描述 Description "每个人都拥有一个梦,即使彼此不相同,能够 ...

  2. P1262 间谍网络 (tarjan缩点 水过去)

    题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...

  3. tarjan缩点与割点

    Tarjan算法 先是废话时间:说来挺惭愧 , 好几个月以前就学过tarjan算法然而现在才第一次写 模板题:[luogu P3387][模板]缩点 tarjan缩点&dp 为啥要缩点答案显然 ...

  4. BZOJ 1051 受欢迎的牛(Tarjan缩点)

    1051: [HAOI2006]受欢迎的牛 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 4573  Solved: 2428 [Submit][S ...

  5. 【图论】Tarjan 缩点

    [Tarjan]缩点 在一个点N数据极大的图中,直接SPFA或者记忆花搜索时间超限,那么我们可以利用Tarjan缩点来减少N. 举个例子: 如上图:3,6两点为该图中的强连通分量,我们可以将它们看做一 ...

  6. bzoj1051 [HAOI2006]受欢迎的牛 tarjan缩点

    题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的"喜欢"是可以传递的--如果A喜 欢B,B喜 ...

  7. 洛谷P4742(tarjan缩点+拓扑DP)

    https://www.luogu.org/problemnew/show/P4742 题目背景 [Night - 20:02[Night−20:02 P.M.]P.M.] 夜空真美啊--但是--快要 ...

  8. 【计蒜客 - 程序设计竞赛】商业信息共享(Tarjan缩点)

    题干: 商业信息共享 有 N 个公司,从每个公司都能单向地向另外一个公司分享最新商业信息,因为他们之间有着某种合作,你需要解决两个问题: 现在有一个最新的商业信息,至少需要告诉多少个公司,使得所有的公 ...

  9. 【POJ - 2186】Popular Cows (Tarjan缩点)

    题干: Every cow's dream is to become the most popular cow in the herd. In a herd of N (1 <= N <= ...

最新文章

  1. JS中的异步任务有哪些
  2. “双十一缔造者”张勇
  3. Terraform 开发指南
  4. ajax请求php省略后缀,如何在PHP中更安全地处理Ajax请求?
  5. Ubuntu16.04下制作deb包的方法详解
  6. 关于opencv的几个小总结
  7. excel如何把顺序倒过来_Excel中表格进行颠倒顺序的操作方法
  8. Mac上制作Mac os10.12.6启动盘的多次尝试
  9. 电子科大考研经验分享
  10. 移动端自动化测试appium(6)--搭建模拟器和真机环境
  11. navicat 连接 oracle (最全解读)
  12. 一种在外部中心化基础下的网络空间去中心化充盈区块链系统
  13. nginx转发post请求
  14. 微信怎么转移聊天记录到另一台新手机,3个免费方法!
  15. IPC-7351 LPWizard使用简要说明
  16. 什么是数据中心SOP、MOP、EOP?
  17. MacBook 安装 win10 系统的方法
  18. 基于stm32c8t6的两轮平衡小车 第一篇——物料选购
  19. 十天搞定考研词汇 ---转发
  20. sentinel-2 大气校正方法

热门文章

  1. linux装机量,在没有盗版的世界 Linux桌面的装机量可能占比达到40%
  2. Express接口案例 使用jsonwebtoken
  3. python网络爬虫系列(二)——ProxyHandler处理器实现代理IP
  4. LeetCode 1619. 删除某些元素后的数组均值
  5. LeetCode 860. 柠檬水找零(贪心)
  6. java浏览器拖拽_使用Java强制移动浏览器缩小
  7. 太原理工电子信焦工程_电气工程及其自动化专业毕业后做什么工作?近几年就业和收入怎样...
  8. java子类继承父类实际_java子类继承父类,是否生成父类对象?
  9. mysql delette_关于字符串:首字母大写MySQL
  10. mysql设置catalog_Catalog与Schema