2822 爱在心中

时间限制: 1 s
空间限制: 128000 KB
题目等级 : 钻石 Diamond
 
 
 
 
题目描述 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

数据范围及提示
Data Size & Hint

各个测试点1s

一个人不算天使,模板题稍微修改一下即可过

良心样例

#include <bits/stdc++.h>
inline int max(int a, int b){return a < b ? b : a;}
inline int min(int a, int b){return a < b ? a : b;}
inline void read(int &x){x = 0;char ch = getchar();char c = ch;while(ch > '9' || ch < '0')c = ch, ch = getchar();while(ch <= '9' && ch >= '0')x = x * 10 + ch - '0', ch = getchar();if(c == '-')x = -x;}
inline void read(long long &x){x = 0;char ch = getchar();char c = ch;while(ch > '9' || ch < '0')c = ch, ch = getchar();while(ch <= '9' && ch >= '0')x = x * 10 + ch - '0', ch = getchar();if(c == '-')x = -x;}
const int INF = 0x3f3f3f3f;
const int MAXN = 100000 + 10;
const int MAXM = 100000 + 10;
struct Edge
{
int u,v,next;
}edge1[MAXM];
int head1[MAXM],cnt1;
inline void insert1(int a, int b){edge1[++cnt1] = Edge{a, b, head1[a]};head1[a] = cnt1;} Edge edge2[MAXM];
int head2[MAXN],cnt2;
inline void insert2(int a, int b){edge2[++cnt2] = Edge{a, b, head2[a]};head2[a] = cnt2;} int n,m; int stack[MAXN],top,t,group,belong[MAXN],dfn[MAXN],low[MAXN],num[MAXN];
bool b[MAXN], bb[MAXN]; int tmp1, tmp2; int ans, ansgroup; void dfs(int u)
{
dfn[u] = low[u] = ++t;
b[u] = bb[u] = true;
stack[++top] = u;
for(int pos = head1[u];pos;pos = edge1[pos].next)
{
int v = edge1[pos].v;
if(!b[v])
{
dfs(v);
low[u] = min(low[v], low[u]);
}
else if(bb[v] && low[u] > dfn[v])
{
low[u] = dfn[v];
}
} if(low[u] == dfn[u])
{
group ++;
int now = 0;
while(now != u)
{
now = stack[top--];
belong[now] = group;
bb[now] = false;
num[group] ++;
}
if(num[group] > 1)ansgroup ++;
}
} inline void rebuild()
{
for(int u = 1;u <= n;u ++)
{
for(int pos = head1[u];pos;pos = edge1[pos].next)
{
int v = edge1[pos].v;
if(belong[u] != belong[v])
{
insert2(belong[u], belong[v]);
}
}
}
} inline void tarjan()
{
for(int i = 1;i <= n;i ++)if(!b[i])dfs(i);
rebuild();
} int main()
{
read(n);read(m);
for(int i = 1;i <= m;i ++)
{
read(tmp1);read(tmp2);
insert1(tmp1, tmp2);
}
tarjan();
printf("%d\n", ansgroup);
for(int i = 1;i <= group;i ++)
{
if(!head2[i])
{
if(ans)
{
ans = 0;break;
}
else if(num[i] != 1)
{
ans = i;
}
}
}
if(ans == 0)
{
printf("-1");
return 0;
}
for(int i = 1;i <= n;i ++)
{
if(belong[i] == ans)
{
printf("%d ", i);
}
}
return 0;
}

【CodeVS】2822 爱在心中 [2017年6月计划 强连通分量03]的更多相关文章

  1. 习题:codevs 2822 爱在心中 解题报告

    这次的解题报告是有关tarjan算法的一道思维量比较大的题目(真的是原创文章,希望管理员不要再把文章移出首页). 这道题蒟蒻以前做过,但是今天由于要复习tarjan算法,于是就看到codevs分类强联 ...

  2. 洛谷P2835 刻录光盘 [2017年6月计划 强连通分量02]

    P2835 刻录光盘 题目描述 在JSOI2005夏令营快要结束的时候,很多营员提出来要把整个夏令营期间的资料刻录成一张光盘给大家,以便大家回去后继续学习.组委会觉得这个主意不错!可是组委会一时没有足 ...

  3. 【模板】Tarjan缩点,强连通分量 洛谷P2341 [HAOI2006]受欢迎的牛 [2017年6月计划 强连通分量01]

    P2341 [HAOI2006]受欢迎的牛 题目描述 每头奶牛都梦想成为牛棚里的明星.被所有奶牛喜欢的奶牛就是一头明星奶牛.所有奶 牛都是自恋狂,每头奶牛总是喜欢自己的.奶牛之间的“喜欢”是可以传递的 ...

  4. codevs & vijos 爱在心中 - Tarjan

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

  5. 洛谷P1774 最接近神的人_NOI导刊2010提高(02) [2017年6月计划 线段树03]

    P1774 最接近神的人_NOI导刊2010提高(02) 题目描述 破解了符文之语,小FF开启了通往地下的道路.当他走到最底层时,发现正前方有一扇巨石门,门上雕刻着一幅古代人进行某种活动的图案.而石门 ...

  6. HDU3887 Counting Offspring [2017年6月计划 树上问题03]

    Counting Offspring Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. codevs 2822 爱在心中

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

  8. codevs——2822 爱在心中

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

  9. codevs 2822爱在心中

    不想吐槽题目.... /* K bulabula 算法(好像用哪个T bulabula更简单 然而我并不会 - -) 丑陋的处理cnt: Printf时 cnt中 ans[i][0]==1 的删掉 然 ...

随机推荐

  1. VS2012 TFS 解决计算机改名无法连接TFS的问题

      闲着没事改了下计算机名字,结果造成TFS无法连接. 报错讯息如下: ---------------------------Microsoft Visual Studio-------------- ...

  2. linux操作mysql命令快速手记 — 让手指跟上思考的速度(二)

    这一篇是<mysql内建命令快速手记>的姐妹篇,废话不再赘述,直接上干货,跟老铁慢慢品 1.mysql -hlocalhost -uroot -proot,-h,-u,-p分别代表ip,u ...

  3. Django入门之基础篇01

    这是第一篇Django(花音:浆够)入门博客,学习Django的初衷是为了开发自己的个人小小网站(虽然有了博客园,还是想建立自己的博客,因为自主定制,香香香~!)

  4. <每日一题>题目20:简单python练习题(11-20)

    #11.编写程序,输入一个自然数,输出它的二进制.八进制.十六进制表示形式 Num = input("请输入任性自然数:") Num = eval(Num) print(" ...

  5. hadoop settings

    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys expor ...

  6. 关于ubuntu中ifconfig得到的ip地址为127.0.0.1

    我们的解决办法是 重新添加一个网络适配

  7. JavaWeb工程中url地址的写法

    两种url地址: 1. "/"给服务器使用, 代表web工程根路径(webroot)2. "/"给浏览器使用, 代表tomcat 目录下的webapps文件夹 ...

  8. EasyUI Tree与Datagrid联动

      效果图 这是一个简单的solr检索的例子   输入关键词,显示树   选择一个节点,得到该节点下文档信息   代码: JSP: 重点是标红的URL传递 <body>     <d ...

  9. DSMM之数据处理安全

    一.背景 数据安全生命周期分为采集.传输.存储.处理.交换.销毁几个阶段,其中数据处理阶段是整个周期的核心阶段,数据处理安全与否直接关系到整体数据安全.那么今天分享内容就是数据处理安全的相关要求和实现 ...

  10. spring cloud深入学习(八)-----配置中心svn示例和refresh

    svn版本 同样先示例server端的代码,基本步骤一样. 1.添加依赖 <dependencies> <dependency> <groupId>org.spri ...