codevs 2822 爱在心中
codevs 2822 爱在心中
“每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动。爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home。”
在爱的国度里有N个人,在他们的心中都有着一个爱的名单,上面记载着他所爱的人(不会出现自爱的情况)。爱是具有传递性的,即如果A爱B,B爱C,则A也爱C。
如果有这样一部分人,他们彼此都相爱,则他们就超越了一切的限制,用集体的爱化身成为一个爱心天使。
现在,我们想知道在这个爱的国度里会出现多少爱心天使。而且,如果某个爱心天使被其他所有人或爱心天使所爱则请输出这个爱心天使是由哪些人构成的,否则输出-1。
第1行,两个数N、M,代表爱的国度里有N个人,爱的关系有M条。
第2到第M+1行,每行两个数A、B,代表A爱B。
第1行,一个数,代表爱的国度里有多少爱心天使。
第2行,如果某个爱心天使被其他所有人和爱心天使所爱则请输出这个爱心天使是由哪些人构成的(从小到大排序),否则输出-1。
样例输入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
样例输出1:
2
2 3
样例输出2:
1
-1
各个测试点1s
#include<iostream>
using namespace std;
#include<cstdio>
#include<algorithm>
#define N 10000
#include<stack>
stack <int> sta;
bool instack[N]={false};
int n,m;
struct Edge{
int u,v,last;
}edge[N<<];
int dfn[N],low[N],father[N];
int t=,sum=,head[N]={},topt=,outdu[N]={},sumout=,ans1[N],ans2[N];
void add_edge(int u,int v)
{
edge[++t].v=v;
edge[t].u=u;
edge[t].last=head[u];
head[u]=t;
}
void input()
{
scanf("%d%d",&n,&m);
int u1,v1;
for(int i=;i<=m;++i)
{
scanf("%d%d",&u1,&v1);
add_edge(u1,v1);
}
}
void tarjan(int k)
{
dfn[k]=low[k]=++topt;
sta.push(k);
instack[k]=true;
for(int l=head[k];l;l=edge[l].last)
{
if(dfn[edge[l].v]==)
{
tarjan(edge[l].v);
low[k]=min(low[k],low[edge[l].v]);
}
else if(instack[edge[l].v])
low[k]=min(low[k],dfn[edge[l].v]);
}
if(dfn[k]==low[k])
{
int js=;
int x;
do
{
x=sta.top();
sta.pop();
father[x]=k;
instack[x]=false;
js++;
}while(x!=k);
if(js>=)
ans1[++ans1[]]=k;
}
}
bool work()
{
for(int i=;i<=m;++i)
{
int x=father[edge[i].u];
int y=father[edge[i].v];
if(x==y) continue;
outdu[x]++;
}
int comp;
for(int i=;i<=ans1[];++i)
{
if(outdu[ans1[i]]==)
{
sumout++;
comp=ans1[i];
}
}
if(sumout!=) return false;
for(int i=;i<=n;++i)
{
if(father[i]==comp)
{
ans2[++ans2[]]=i;
}
}
return true;
}
int main()
{
input();
for(int i=;i<=n;++i)
{
if(!dfn[i])
tarjan(i);
}
printf("%d\n",ans1[]);
if(work())
{
sort(ans2+,ans2+ans2[]+);
for(int i=;i<=ans2[];++i)
printf("%d ",ans2[i]);
printf("\n");
}else printf("-1\n");
return ;
}
codevs 2822 爱在心中的更多相关文章
- codevs——2822 爱在心中
2822 爱在心中 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 题目描述 Description “每个人都拥有一个梦,即使彼此不相 ...
- codevs 2822爱在心中
不想吐槽题目.... /* K bulabula 算法(好像用哪个T bulabula更简单 然而我并不会 - -) 丑陋的处理cnt: Printf时 cnt中 ans[i][0]==1 的删掉 然 ...
- 习题:codevs 2822 爱在心中 解题报告
这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...
- 【wikioi】2822 爱在心中
题目链接 算法:Tarjan+dfs(最短路的都行,判连通而已) 先了解一下什么是Tarjan Tarjan算法用于求出图中所有的强连通分量. 转自NOCOW:点击打开链接 ============= ...
- 【CodeVS】2822 爱在心中 [2017年6月计划 强连通分量03]
2822 爱在心中 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description “每个人都拥有一个梦,即使彼此不相同,能够 ...
- codevs2822 爱在心中
2822 爱在心中 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无 ...
- 【codevs2822】爱在心中 tarjan 缩点+理解
[codevs2822]爱在心中 2014年1月26日5580 题目描述 Description “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸, ...
- 【CodeVS 2822】爱在心中
“每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home.” 在爱的国度里有N个人,在他们的心中都有着一个 ...
- 爱在心中(codevs 2822)
题目描述 Description “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home.” 在爱的国度 ...
随机推荐
- Hadoop Pipes Exception: Illegal text protocol command
Hadoop Pipes Exception: Illegal text protocol command 对于Hadoop pipes 出现这样的错误,基本上编译代码依赖的.so和.a 版本不匹配 ...
- 状态压缩DP---Hie with the Pie
http: //acm.hust.edu.cn/vjudge/contest/view.action?cid=110044#problem/B Description The Pizazz Pizze ...
- python pip 升级每个包
pip本身不自带升级所有包的功能, 但可以通过下面的脚本实现. import pip from subprocess import call for dist in pip.get_installed ...
- Office2016体验
Microsoft又迎来了更新的季节.对于我来说,win10就算了,不太稳定,特别是遇到一些专业的程序,因为很多行业软件开发.测试环境都是winxp或win7等:VS2015也安上了,但还没用,一直用 ...
- Spark GraphX学习资料
<Spark GraphX 大规模图计算和图挖掘> http://book.51cto.com/art/201408/450049.htm http://www.csdn.net/arti ...
- Effective Java 阅读笔记——方法
38:检查参数的有效性 每当编写方法或者构造器的时候,应该考虑它的参数有哪些限制,在方法的开头处对参数进行检查,并且把这些限制写入文档. 注意: 对于公有方法,应该使用@throws标签在文档中说明违 ...
- IOS 计步器
这篇博客介绍的是当前比较流行的“计步器”-只是简单的知识点 计步器的实现在IOS8开始进行了改变. 但是我会对之前之后的都进行简单介绍. IOS 8 - // // ViewController.m ...
- jQuery点击事件绑定onClick和on()
一.静态绑定 (1)onclick方法 jsp代码 <button href="javascript:;" class="weui_btn weui_btn_min ...
- 数据库测试DbUnit
DBUnit 的设计理念就是在测试之前,备份数据库,然后给对象数据库植入我们需要的准备数据,最后,在测试完毕后,读入备份数据库,回溯到测试前的状态: 摘自:DbUnit入门实战 DBUnit官网:ht ...
- 安装concrete时提示“...database does not support InnoDB database tables..."如何解决
安装很多系统时,经常有有提示: "...database does not support InnoDB database tables..." 解决办法: 找到MySQL的配置文 ...