【CodeVS 2822】爱在心中
“每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动。爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home。”
在爱的国度里有N个人,在他们的心中都有着一个爱的名单,上面记载着他所爱的人(不会出现自爱的情况)。爱是具有传递性的,即如果A爱B,B爱C,则A也爱C。
如果有这样一部分人,他们彼此都相爱,则他们就超越了一切的限制,用集体的爱化身成为一个爱心天使。
现在,我们想知道在这个爱的国度里会出现多少爱心天使。而且,如果某个爱心天使被其他所有人或爱心天使所爱则请输出这个爱心天使是由哪些人构成的,否则输出-1。
tarjan缩点后判断一下每个新节点的出度就可以了~
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 10003;
const int M = 50003;
void read(int &k) {
k = 0; int fh = 1; char c = getchar();
for(; c < '0' || c > '9'; c = getchar())
if (c == '-') fh = -1;
for(; c >= '0' && c <= '9'; c = getchar())
k = (k << 1) + (k << 3) + c - '0';
k = k * fh;
} bool vis[N], inst[N];
struct node {int from, nxt, to;} E[M];
int DFN[N], low[N], point[N], cnt = 0, col[N], color = 0, st[N], top = 0, n, m, out[N], sum[N];
void tarjan(int x) {
DFN[x] = low[x] = ++cnt;
st[++top] = x; vis[x] = inst[x] = 1;
for(int tmp = point[x]; tmp; tmp = E[tmp].nxt)
if (!vis[E[tmp].to]) tarjan(E[tmp].to), low[x] = min(low[x], low[E[tmp].to]);
else if (inst[E[tmp].to]) low[x] = min(low[x], DFN[E[tmp].to]);
if (low[x] == DFN[x]) {
int u = 0; ++color;
while (u != x) {
u = st[top--];
col[u] = color;
inst[u] = 0;
++sum[color];
}
}
}
void ins(int x, int y) {E[++cnt] = (node) {x, point[x], y}; point[x] = cnt;}
int main() {
read(n); read(m);
int u, v;
for(int i = 1; i <= m; ++i) read(u), read(v), ins(u, v);
cnt = 0;
for(int i = 1; i <= n; ++i) if (!vis[i]) tarjan(i);
for(int i = 1; i <= m; ++i) {
u = col[E[i].from]; v = col[E[i].to];
if (u != v) ++out[u];
}
int ans = 0, tmp = 0;
for(int i = 1; i <= color; ++i) if (sum[i] > 1) ++tmp;
for(int i = 1; i <= color; ++i) {
if (out[i] == 0) {
if (ans != 0 || sum[i] == 1) {ans = 0; break;}
else ans = i;
}
}
printf("%d\n", tmp);
if (ans == 0) puts("-1");
else {
for(int i = 1; i <= n; ++i)
if (col[i] == ans)
printf("%d ", i);
}
return 0;
}
又手残了,药丸~
【CodeVS 2822】爱在心中的更多相关文章
- codevs 2822 爱在心中
codevs 2822 爱在心中 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description “每个人都拥有一个梦,即使彼此不相同, ...
- 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)
题目描述 Description “每个人都拥有一个梦,即使彼此不相同,能够与你分享,无论失败成功都会感动.爱因为在心中,平凡而不平庸,世界就像迷宫,却又让我们此刻相逢Our Home.” 在爱的国度 ...
随机推荐
- poj2486Apple Tree[树形背包!!!]
Apple Tree Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 9989 Accepted: 3324 Descri ...
- [No00003F]richtextbox实现拖放
namespace WindowsFormsApplication1 { public partial class Form1 : Form { public Form1() { Initialize ...
- java 22 - 23 多线程之定时器的概述和使用例子
定时器是一个应用十分广泛的线程工具,可用于调度多个定时任务以后台线程的方式执行. 在Java中,可以通过Timer和TimerTask类来实现定义调度的功能 开发中 Quartz是一个完全由java编 ...
- samsung Galaxy s2(GT i9100g )刷机升级至4.4小记
从昨天上午到现在,大部分时间都是在将i9100g更新到4.4.虽然中途也做了一些别的事情,但是更新过程还是走了一点弯路,比开始预想的稍微慢了一点,现在将完整的更新步骤分享给大家,以帮助后来的同学.升级 ...
- 利用substring()方法,把一个表的不同分级所对应的字段名取出来。
实例:现在有一个物料分类的表.知道表的第四级的值,要取前面的2,3级值. 例如,如图所示: 可以通过取前面几个字段的值,得到对应级别的值.利用substring(),但是因为要写在一句话里. 因此可以 ...
- iOS UIControl 详解
UIControl是UIView的子类,当然也是UIResponder的子类.UIControl是诸如UIButton,UISwitch,UItextField等控件的父类,它本身包含了一些属性和方法 ...
- crontab日常使用梳理
在日常的运维工作中,对crontab定时任务的制定是再寻常不过的了.根据以往的使用经验梳理如下: 基本格式 :* * * * * command分 时 日 月 周 命令解释:第1列表示分钟1-59 每 ...
- [推荐]两款Flash上传插件(1)–CFUpdate文件批量上传组件
搞开发的同学都知道,网上可搜到的可用的Flash图片上传的组件少之又少,可定制界面,不需要安装组件,且可免费用于任何商业系统的,更是凤毛麟角,如果你和我一样,迫切需要一款这样的一款组件的话,不妨试试C ...
- TP框架实现分页
TP框架自带分页的实现方法,所以使用这个分页方案,不用再重新造轮子 1,先看效果图 2,源码 /** * TODO 基础分页的相同代码封装,使前台的代码更少 * @param $m 模型,引用传递 * ...
- AAL模版 中英文对照
来源:http://52brain.com/thread-17336-1-1.html Brodmann分区是一个根据细胞结构将大脑皮层划分为一系列解剖区域的系统.神经解剖学中所谓细胞结构(Cytoa ...