好久没写题解了= =这次是bzoj 1051
唉= =这道题我都想到了tarjan缩点,但是没有想到最后一步啊= =我们很容易想到反向建边然后缩点,这时候我们看由多少个联通块的入度为0,如果为1个,那就输出这个块的大小,否则输出0;
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
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;
}
好久没写题解了= =这次是bzoj 1051的更多相关文章
- 好久没写原生的PHP调用数据库代码了分享个
好久没写原生的PHP代码调用数据库了 eader("Content-type: text/html; charset=utf-8"); $time=$symptoms=$attr= ...
- 好久没写Blog了
上一年的经历: <炸年兽>搞了一阵后,美术去创业了.. 和另一个美术断断续续,做了个<斗战圣佛>,挺山寨的,都没敢跟别人说. 不管怎么说也算是自己上了一个appStore的游戏 ...
- 利用border和伪类画出三角形 ps:好久没写博客了。。。
有一个半月没有写博客了,这段时间,小哥我经历了自入行前端最为黑暗的时期,迷茫,空虚,不想写代码,不想做研究了.连打游戏都没有兴趣,如同行尸走肉一般.还好,毕业论文的初稿完成后,整个时间段最恶心最难熬的 ...
- 好久没写作业了,因为组里分配了任务,学习了Resnet和DenseNet,把概要po上来和大家分享。
Res: 学长说,不要看别人的博客.看多了就看傻了!俗话说,不听老人言,吃亏在眼前. 第一篇论文来咯!Deep Residual Learning for Image Recognition!国人写的 ...
- c++设计模式总结 好久没写博客了 实在是忙
具体代码就不贴出来了 通俗易懂的理解方式 原创 c++设计模式: 简单工厂模式 工厂模式有一种非常形象的描述,建立对象的类就如一个工厂,而需要被建立的对象就是一个个产品:在工厂中加工产品 ...
- python io 模块之 open() 方法(好久没写博客了)
io.open(file, mode='r', buffering=-1, encoding=None, errors=None, newline=None, closefd=True),打开file ...
- 好久没写blog了 ~ 换了个城市,换了个公司,各种忙碌
最近一直在忙工作交接以及换城市.入职的事情 ~~~ 新公司做C++的比较少,so全上C++11了,写代码各种爽. 最近应该会写一点关于QT的blog , 学到新知识了哈.
- 好久好久没写,,百度API逆地址解析以及删除指定marker
百度地图Api中 除覆盖物有两个方法:map.removeOverlay()或者 map.clearOverlays(),其中 clearOverlays()方法一次移除所有的覆盖物removeOve ...
- 好久没写了,SQLSERVER服务丢失后怎么办
服务器突然中了病毒,查杀后,结果两个服务也丢了, 从其他机器上COPY了两个EXE过来,编写这两个服务就搞定了,不用重装MSSQL2005了 sc create MSSQLSERVER binpath ...
随机推荐
- memcache常用操作
Command Description Example get 读取键值 get mykey set 设置新键值 set mykey 0 60 5 add 新增键值 add newkey 0 60 5 ...
- 关于axios中post请求提交后变成get的问题
这个问题归结于自己的不细心,如下图. 头疼了好久,才发现是自己多写了一个s,在此记录一下.
- Sqlserver复杂查询
--联表修改 update xyzrb set xyzrb.xy_card=tablsb.card from xyzrb left join tablsb on xyzrb.xybh=tablsb.x ...
- 简单的使用Qt的QCustomplot画图
一.新建一个widget工程 二.将Qcustomplot文件复制到项目下 三.右键qt项目增加已存在的文件 四.在.pro中添加 QT += widgets printsupport 五.在.h中添 ...
- NOIP模拟测试19
T1: 题目大意:将一颗有N个节点的树分割,使得每个联通块大小相等,问一共有多少方案.(N<=1000000) 首先,一条很显然的性质,每个联通块的大小一定是N的因子. 然后,我们可以对于每个因 ...
- 对Map的key按升序进行排序
//对Map的key按升序进行排序 List<Map.Entry<Integer,Task>> mappingList = new ArrayList<Map.Entry ...
- APIO2019
device: 用最小公倍数的知识或是画网格模拟转移,神仙们也可以找规律.然后就变成区间覆盖了. 忘记特殊情况了,大众分→Ag #include<iostream> #include< ...
- shiro与spring的整合
shiro与spring的整合 上一期,我们分享了如何在项目中使用shiro,了解了shiro的基本用法,但毕竟学习shiro的目的就是在项目中应用shiro,更准确地说是在web项目中应用shiro ...
- Visual Studio 2012常用快捷键总结
合理使用快捷键可以提高开发效率.收集整理一些常用的快捷键以方便查看使用 1.回到上一个光标位置/前进到下一个光标位置 1)回到上一个光标位置:使用组合键"Ctrl + -": 2) ...
- int在64位操作系统中占多少位?
仍然是32位. 曾经是这样的:16位操作系统中,int 占16位:在32位操作系统中,int 占32位.但是现在人们已经习惯了 int 占32位,因此在64位操作系统中,int 仍为32位.64位整型 ...