其实就是手打了个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裸题的更多相关文章

  1. POJ1236-Network of Schools(Tarjan + 缩点)

    主题链接 题意:给定一张有向图,问最少选择几个点能遍历全图.以及最少加入几条边使得有向图成为一个强连通图. 思路:对于有向图而言,首先求出有几个强连通分量,之后将每一个强连通分量缩点,形成DAG.本题 ...

  2. Tarjan 做题总结

    这两天Tarjan复习完后把题做了做.洛谷题单<图的连通性>已经做得差不多了.大部分是Tarjan的题,所以写一篇小总结. T1 [模板] 缩点 不多bb.我已经写过关于Tarjan模板的 ...

  3. tarjan讲解(用codevs1332(tarjan的裸题)讲解)

    主要借助这道比较裸的题来讲一下tarjan这种算法 tarjan是一种求解有向图强连通分量的线性时间的算法.(用dfs来实现) 如果两个顶点可以相互通达,则称两个顶点强连通.如果有向图G的每两个顶点都 ...

  4. Tarjan水题系列(4):HAOI2010 软件安装

    题目: 现在我们的手头有N个软件,对于一个软件i,它要占用Wi​的磁盘空间,它的价值为Vi​.我们希望从中选择一些软件安装到一台磁盘容量为M计算机上,使得这些软件的价值尽可能大(即Vi​的和最大). ...

  5. 【填坑】bzoj3224 splay裸题

    人生第一道splay不出所料是一道裸题,一道水题,一道2k代码都不到的题 #include <cstdio> ,n,p,q; ],c[][],size[],sp[]; void rot(i ...

  6. LCT裸题泛做

    ①洞穴勘测 bzoj2049 题意:由若干个操作,每次加入/删除两点间的一条边,询问某两点是否连通.保证任意时刻图都是一个森林.(两点之间至多只有一条路径) 这就是个link+cut+find roo ...

  7. 贴一下WC总结里提到的那道裸题吧。。。

    [bzoj4034][HAOI2015]T2 试题描述 有一棵点数为 N 的树,以点 1 为根,且树点有边权.然后有 M 个 操作,分为三种: 操作 1 :把某个节点 x 的点权增加 a . 操作 2 ...

  8. HDU 1102 最小生成树裸题,kruskal,prim

    1.HDU  1102  Constructing Roads    最小生成树 2.总结: 题意:修路,裸题 (1)kruskal //kruskal #include<iostream> ...

  9. hdu Flow Problem (最大流 裸题)

    最大流裸题,贴下模版 view code#include <iostream> #include <cstdio> #include <cstring> #incl ...

随机推荐

  1. mui jquery 同时使用

    (function ($, doc, $$) { $.init(); $.ready(function () { var cityPicker = new $.PopPicker({ layer: } ...

  2. TransactionScope 之分布式配置

    .Net开发过程中,涉及多个数据库和不同数据库的分布式事务(Distributed Transaction)开发,有时会碰到“与基础事务管理器的通信失败”的错误.导致这个错误一般有下列三个原因:1)  ...

  3. tyvj1144 股票

    描述 2130年,股神巴菲特投胎了!他投胎到你身上!你作为股神转世,能力比原股神还要强,你可以预测到今后n天的股价.假设刚开始你的手上有1元钱,你想知道n天后你最多可以赚到多少钱.作为股神转世,你准备 ...

  4. [Scala] 快学Scala A1L1

    基础 1.1 声明值和变量 在Scala中,鼓励使用val; 不需要给出值或变量的类型,这个信息可以从初始化表达式推断出来.在必要的时候,可以指定类型. 在Scala中,仅当同一行代码中存在多条语句时 ...

  5. PAT mooc DataStructure 4-2 SetCollection

    数据结构习题集-4-2 集合的运用 1.题目: We have a network of computers and a list of bi-directional connections. Eac ...

  6. PHP之static静态变量详解(二)

    在看别人项目过程中,看到函数里面很多static修饰的变量,关于static修饰的变量,作用域,用法越看越困惑,所以查了下资料. static用法如下: 1.static 放在函数内部修饰变量 2.s ...

  7. double 和 float

    对编程人员来说,double 和 float 的区别是double精度高,有效数字16位,float精度7位.但double消耗内存是float的两倍,double的运算速度比float慢得多,C语言 ...

  8. ftp服务配置文件记录

    因为南京的客户死活要ftp服务而不是sftp,所以我作手用vsftp作为服务器,尝试在windows ftp软件登录进去,特记录vsftp的用法. 配置文件在/etc/vsftpd.conf 有如下代 ...

  9. VC++ CString类完美总结(整理)

    CString 是编程中一种非常有用的数据类型,它是MFC中的一个类,很大程度上简化了MFC中的许多字符串的操作. CString位于头文件afx.h中. ①.CString 类对象的初始化: CSt ...

  10. C Primer Plus_第8章_字符输入输出和输入确认_编程练习

    1.题略 #include <stdio.h> int main(void) { ; printf("Please enter text here(end with Ctrl + ...