怕自己太久没写Tarjan了就会把这种神仙算法忘掉. 其实这种类型的图论题的套路还是比较简单且显然的. P2002 消息扩散 很显然的题目,因为在一个环(其实就是强连通分量)中的城市都只需要让其中一个知道就可以让其它的城市都得知信息了. 因此我们把在一个强连通分量中的点都缩点,然后就得到一个DAG 然后我们只需要给入度为0的点传递信息即可 CODE #include<cstdio> #include<cstring> using namespace std; const int N…
题目链接:https://www.luogu.org/problemnew/show/P2002 缩点把原图变为DAG,再在DAG上判断找入度为0的点的个数. 注意一点出度为0的点的个数不等于入度为0的点. #include <stack> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; const…
题目传送门 这个题其实就是tarjan缩点的板子题对吧....至少我是这么想的 首先这是个有向图,对于一个有向图,我们肯定要考虑环的存在与否,恰好这个题又是让我们找出最少的点,使得这几个点能够走遍全图 那么,显然,对于每一个强连通分量,我们看做一个点即可(因为强连通分量中每两个点之间一定能从一个点到另一个点,即从一个点出发一定能够走遍整个强连通分量) 缩完点之后,我们得到一个DAG,显然,对于每一个入度为零的点,我们都需要发布消息,其余入度不为零的点都可以通过这些入度为零的点走到 于是,这题就A…
P1262 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报.所以,如果我们能够收买一些间谍的话,我们就可能控制间谍网中的每一分子.因为一旦我们逮捕了一个间谍,他手中掌握的情报都将归我们所有,这样就有可能逮捕新的间谍,掌握新的情报. 我们的反间谍机关提供了一份资料,色括所有已知的受贿的间谍,以及他们愿意收受的具体数额.同时我们还知道哪些…
P2002 消息扩散 题目背景 本场比赛第一题,给个简单的吧,这 100 分先拿着. 题目描述 有n个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出n个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有n个城市都得到消息. 输入输出格式 输入格式: 第一行两个整数n,m表示n个城市,m条单向道路. 以下m行,每行两个整数b,e表示有一条从b到e的道路,道路可以重复或存在自环. 输出格式: 一行一个整数,表示至少要在几个城市中发布消息. 输入输出样例 输入样例#1: 5 4 1…
题目链接:https://www.luogu.org/problemnew/show/P1262 注意: 1.缩点时计算出入度是在缩完点的图上用color计算.不要在原来的点上计算. 2.枚举出入度时是在缩完点的图上计算.枚举范围到num. #include <stack> #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using nam…
传送门 思路: ①在 Tarjan 的基础上加一个 belong 记录每个点属于哪个强连通分量. ②存图完成后,暴力地遍历全图,查找是否要间谍不愿受贿. inline void dfs(int u) { if(vis[u]) return ; vis[u]=true,tot++; for(int i=head[u];i;i=t[i].nex) dfs(t[i].to); }//遍历 遍历完后,看看那个间谍没被搜索过(vis数组记录),就把那个不受贿的间谍抓出来. ③如果所有的间谍都愿意受贿,就继…
洛谷P1262:https://www.luogu.org/problemnew/show/P1262 思路 一看题目就知道是强连通分量缩点 当图中有强连通分量时 将其缩点 我们可以用dfn数组判断是否可以达到所有人都可以控制 到最后图中可能有如下2种情况 First 整个图为一个强连通分量 ans即是能贿赂的最小值 Second 当图中有链时 贿赂链的第一个人即可取得最小值 代码 #include<iostream> #include<cstring> using namespa…
4093 EZ的间谍网络 时间限制: 10 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报.所以,如果我们能够收买一些间谍的话,我们就可能控制间谍网中的每一分子.因为一旦我们逮捕了一个间谍,他手中掌握的情报都将归我们所有,这样就有可能逮捕新的间谍,掌握新的情报. 我们的反间谍机关…
题目:https://www.luogu.org/problemnew/show/P1262 首先,一个强连通分量里有一个点被控制则所有点都被控制,所以先 tarjan 缩点,记一下每个连通块中能被收买的人的最小价钱,和整个连通块的点的最小 id: 然后如果有入度为0的点不能被收买,则输出 NO,找最小 id 时注意要找它指向的所有点,又不包括中间可以被收买的: 否则就是 YES,花费就是入度为0的点的最小代价之和. 代码如下: #include<iostream> #include<c…