poj1236Network of Schools Tarjan裸题
其实就是手打了个Tarjan的模板
输出的时候注意是入度为0的点的个数和max(入度0的个数,出度0的个数),在n=1时特判为0即可
——以后图论要渐渐模板化,方便使用
#include <cstdio>
#include <iostream>
using namespace std;
struct E
{
int from,to,next;
} e[];
int Enum=,sttop=;
int first[];
int dfn[],low[];
bool que[];
int tar[];
int sum,n,_ans,ans;
int df;
int num[];
int st[];
void add(int from,int to)
{
E New;
New.from=from;
New.to=to;
New.next=first[from];
e[++Enum]=New;
first[from]=Enum;
}
void tarjan_dfs(int u)
{
st[++sttop]=u;
int v;
que[u]=;
dfn[u]=low[u]=++df;
for(int i=first[u];i;i=e[i].next)
{
v=e[i].to;
if(dfn[v]==)
{
tarjan_dfs(v);
low[u]=min(low[u],low[v]);
}
else
if(que[v])
low[u]=min(low[u],dfn[v]);
}
if(dfn[u]==low[u])
{
sum++;
do
{
v=st[sttop--];
que[v]=;
tar[v]=sum;
}while(u!=v);
}
}
int tarjan()
{
sum=;df=;sttop=;
for(int i=;i<=n;i++)
if(!dfn[i])
tarjan_dfs(i);
for(int i=;i<=n;i++)
first[i]=;//清空原有边
for(int i=;i<=Enum;i++)
if(tar[e[i].from]!=tar[e[i].to])
{
e[i].from=tar[e[i].from];
e[i].to=tar[e[i].to];
e[i].next=first[e[i].from];
first[e[i].from]=i;
num[e[i].to]++;
}
return sum;
}
void dfs(int k)
{
if(first[k])
for(int i=first[k];i;i=e[i].next)
dfs(e[i].to);
else
if(!que[k])
{
_ans++;
que[k]=;
}
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
{
int k;
scanf("%d",&k);
while(k>)
{
add(i,k);
scanf("%d",&k);
}
}
n=tarjan();
for(int i=;i<=n;i++)
que[i]=;
for(int i=;i<=n;i++)
if(!num[i])
{
ans++;
dfs(i);
}
printf("%d\n%d\n",ans,n==?:max(ans,_ans));
return ;
}
poj1236Network of Schools Tarjan裸题的更多相关文章
- POJ1236-Network of Schools(Tarjan + 缩点)
主题链接 题意:给定一张有向图,问最少选择几个点能遍历全图.以及最少加入几条边使得有向图成为一个强连通图. 思路:对于有向图而言,首先求出有几个强连通分量,之后将每一个强连通分量缩点,形成DAG.本题 ...
- Tarjan 做题总结
这两天Tarjan复习完后把题做了做.洛谷题单<图的连通性>已经做得差不多了.大部分是Tarjan的题,所以写一篇小总结. T1 [模板] 缩点 不多bb.我已经写过关于Tarjan模板的 ...
- tarjan讲解(用codevs1332(tarjan的裸题)讲解)
主要借助这道比较裸的题来讲一下tarjan这种算法 tarjan是一种求解有向图强连通分量的线性时间的算法.(用dfs来实现) 如果两个顶点可以相互通达,则称两个顶点强连通.如果有向图G的每两个顶点都 ...
- Tarjan水题系列(4):HAOI2010 软件安装
题目: 现在我们的手头有N个软件,对于一个软件i,它要占用Wi的磁盘空间,它的价值为Vi.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi的和最大). ...
- 【填坑】bzoj3224 splay裸题
人生第一道splay不出所料是一道裸题,一道水题,一道2k代码都不到的题 #include <cstdio> ,n,p,q; ],c[][],size[],sp[]; void rot(i ...
- LCT裸题泛做
①洞穴勘测 bzoj2049 题意:由若干个操作,每次加入/删除两点间的一条边,询问某两点是否连通.保证任意时刻图都是一个森林.(两点之间至多只有一条路径) 这就是个link+cut+find roo ...
- 贴一下WC总结里提到的那道裸题吧。。。
[bzoj4034][HAOI2015]T2 试题描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 ...
- HDU 1102 最小生成树裸题,kruskal,prim
1.HDU 1102 Constructing Roads 最小生成树 2.总结: 题意:修路,裸题 (1)kruskal //kruskal #include<iostream> ...
- hdu Flow Problem (最大流 裸题)
最大流裸题,贴下模版 view code#include <iostream> #include <cstdio> #include <cstring> #incl ...
随机推荐
- 增加UBUNTU字符集 解决中文乱码问题
对GBK,GB2312,GB18030字符集的支持是UBUNTU中文乱码的罪魁祸首,其实我们可以在保持UTF-8为默认编码的条件下添加对这几个编码的支持,以解决中文乱码问题. 我想这个问题肯定有其他人 ...
- context元素大概解说
Context元素代表一个web应用,运行在某个特定的虚拟主机上.如Servlet Specification 2.2或以后版本中描述的那样,每个web应用基于一个Web Application Ar ...
- JS 加载html 在IE7 IE8下 可调试
实际背景 就是都是HTML 公共头部底部 然后中间部分加载不同的HTML文件 有点跟模板引擎一样 jQuery 有个load函数 加载html文件的路径 获取html内容 到中间部分 正常下是不能用 ...
- storyboard传值方式
通过segue传值 在storyboard设置segue的Identifier segue是连接两个视图控制器交互的线 sender是触发这个方法执行的对象,比如是单击tableView上的cel ...
- thinkphp一句话疑难解决笔记
URL_PATHINFO_DEPR, depr表示 网页路径"分隔符",用"-", 有利于seo,注意是从 sername/index.php(开始的)/hom ...
- Rails的三种环境----开发环境,生产环境和测试环境
Rails 的三个环境 Rails 的应用程序预设提供了三种不同的执行模式: development environment 开发模式,用在你的开发的时候 test environment 测试模式, ...
- H5播放器
<!DOCTYPE html> <html> <body> <div style="text-align:center"> ...
- 【荐】PHP采集工具curl快速入门教程
为什么要用CURL? CURL(Client URL Library Functions)是一个利用URL语法在命令行方式下工作的文件传输工具.它支持很多协议:FTP, FTPS, HTTP, HTT ...
- 【Alpha版本】项目总结
我说的都队 031402304 陈燊 031402342 许玲玲 031402337 胡心颖 031402203 陈齐民 031402209 黄伟炜 031402233 郑扬涛 031402341 王 ...
- windows7下php5.4成功安装imageMagick,及解决php imagick常见错误问题。(phpinfo中显示不出来是因为:1.imagick软件本身、php本身、php扩展三方版本要一致,2.需要把CORE_RL_*.dll多个文件放到/php/目录下面)
windows7下 php5.4成功安装imageMagick . (phpinfo中显示不出来是因为:1.软件本身.php本身.php扩展三方版本要一致,2.需要把CORE_RL_*.dll多个 ...