博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
好久没写题解了= =这次是bzoj 1051
阅读量:4960 次
发布时间:2019-06-12

本文共 2049 字,大约阅读时间需要 6 分钟。

唉= =这道题我都想到了tarjan缩点,但是没有想到最后一步啊= =我们很容易想到反向建边然后缩点,这时候我们看由多少个联通块的入度为0,如果为1个,那就输出这个块的大小,否则输出0;

#include 
#include
#include
#include
using namespace std;const int maxn = 10010;const int maxe = 50010;struct edge { int t; edge* next;}e[maxe * 2], *head[maxn]; int ne = 0;int n, m;void addedge(int f, int t) { e[ne].t = t, e[ne].next = head[f]; head[f] = e + ne ++;}void read() { scanf("%d%d", &n, &m); for(int i = 1; i <= m; ++ i) { int u, v; scanf("%d%d", &u, &v); addedge(v, u); }}int dfs[maxn], back[maxn];int s[maxn], top = 0, Index = 0;bool vis[maxn]; int num = 0;int size[maxn];int belong[maxn];void tarjan(int now) { dfs[now] = back[now] = ++ Index; vis[now] = true; s[++ top] = now; for(edge* p = head[now]; p; p = p-> next) { if(!dfs[p-> t]) tarjan(p-> t), back[now] = min(back[now], back[p-> t]); else if(vis[p-> t] && back[now] > dfs[p-> t]) { back[now] = dfs[p-> t]; } } if(dfs[now] == back[now]) { ++ num; while(1) { belong[s[top]] = num; size[num] ++; vis[s[top]] = false; if(s[top] == now) break; top --; } top --; }}int f[maxn]; int in[maxn];bool have[maxn];void sov() { memset(vis, false, sizeof(false)); memset(size, 0, sizeof(size)); memset(have, 0, sizeof(have)); for(int i = 1; i <= n; ++ i) { if(!dfs[i]) tarjan(i); } memset(in, 0, sizeof(in)); int tol = 0; for(int i = 1; i <= n; ++ i) { for(edge* p = head[i]; p; p = p-> next) { if(belong[p-> t] != belong[i]) { in[belong[p-> t]] ++; } } } int pos = 0; for(int i = 1; i <= num; ++ i) { if(in[i] == 0) tol ++, pos = i; } if(tol == 1) printf("%d\n", size[pos]); else printf("0\n");}int main() { //freopen("test.in", "r", stdin); read(); sov(); return 0;}

 

转载于:https://www.cnblogs.com/ianaesthetic/p/3949974.html

你可能感兴趣的文章
php实现抓取网站百度快照和百度收录数量的代码实例
查看>>
Qt那点事儿(三) 论父对象与子对象的关系
查看>>
jar 命令 打包装class文件的文件夹
查看>>
node.js express配置允许跨域
查看>>
JSP EL表达式详细介绍(转)
查看>>
要想找出正好包含5个字符的名字
查看>>
用js把图片做的富有动态感,并对以后需要用着的属性进行封装
查看>>
ArcGIS Runtime For Android 100.3天地图不加载问题
查看>>
线性表
查看>>
【转】解决eclipse新导入工程无法run as server
查看>>
【转】struts1.2的action参数配置
查看>>
快速幂&快速乘
查看>>
WebLogic 12c 多节点Cluster静默安装
查看>>
win8中如何禁用屏幕旋转的快捷键
查看>>
Solution 23: 判断矩形和圆是否相交
查看>>
Qt And MFC Mouse Over Tips
查看>>
JSP/Servlet 中的汉字编码问题
查看>>
《构建之法》(十)
查看>>
django之信号
查看>>
[noip2013]货车运输(kruskal + 树上倍增)
查看>>