【题解】洛谷P1262 间谍网络 (强连通分量缩点)
洛谷P1262:https://www.luogu.org/problemnew/show/P1262
思路
一看题目就知道是强连通分量缩点
当图中有强连通分量时 将其缩点
我们可以用dfn数组判断是否可以达到所有人都可以控制
到最后图中可能有如下2种情况
First 整个图为一个强连通分量 ans即是能贿赂的最小值
Second 当图中有链时 贿赂链的第一个人即可取得最小值
代码
#include<iostream>
#include<cstring>
using namespace std;
#define maxn 3010
#define INF 1e9+7
int n,r,p,top,num,cnt,col,ans;
int money[maxn],h[maxn*],de[maxn],st[maxn],dfn[maxn],low[maxn],co[maxn],minn[maxn];
bool vis[maxn];
struct Edge
{
int to;
int next;
}e[maxn*];
void add(int u,int v)
{
e[++cnt].to=v;
e[cnt].next=h[u];
h[u]=cnt;
}
void read()
{
cin>>n>>p;
for(int i=;i<=n;i++)
minn[i]=money[i]=INF;//初始化
for(int i=;i<=p;i++)
{
int x,y;
cin>>x>>y;
money[x]=y;
}
cin>>r;
for(int i=;i<=r;i++)
{
int x,y;
cin>>x>>y;
add(x,y);
}
}
void Tarjan(int u)
{
dfn[u]=low[u]=++num;
st[++top]=u;
vis[u]=;
for(int i=h[u];i;i=e[i].next)
{
int v=e[i].to;
if(!dfn[v])
{
Tarjan(v);
low[u]=min(low[u],low[v]);
}
else
if(vis[v])
{
low[u]=min(low[u],dfn[v]);
}
}
if(dfn[u]==low[u])
{
col++;
while(st[top+]!=u)
{
co[st[top]]=col;
vis[st[top]]=;
minn[col]=min(minn[col],money[st[top]]);//计算每个强连通分量中的最小花费
top--;
}
}
}
int main()
{
read();
for(int i=;i<=n;i++)
if(!dfn[i]&&money[i]!=INF) Tarjan(i);//能被贿赂的人才可以缩点
for(int i=;i<=n;i++)
if(!dfn[i])//如果dfn为0说明没有被控制
{
cout<<"NO"<<endl<<i;
return ;
}
for(int i=;i<=n;i++)//统计入度
for(int j=h[i];j;j=e[j].next)
if(co[i]!=co[e[j].to]) de[co[e[j].to]]++;
for(int i=;i<=col;i++)//如果入度为0 即是一条链
if(!de[i]) ans+=minn[i];
cout<<"YES"<<endl<<ans;
}
【题解】洛谷P1262 间谍网络 (强连通分量缩点)的更多相关文章
- 洛谷P1262 间谍网络[强连通分量 BFS]
		题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ... 
- 洛谷——P1262 间谍网络
		P1262 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意 ... 
- 洛谷P1262 间谍网络
		本来只想刷道小题,没想到还有点麻烦 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美 ... 
- 洛谷 P1262 间谍网络 —— 缩点
		题目:https://www.luogu.org/problemnew/show/P1262 首先,一个强连通分量里有一个点被控制则所有点都被控制,所以先 tarjan 缩点,记一下每个连通块中能被收 ... 
- 洛谷 P1262 间谍网络==Codevs 4093  EZ的间谍网络
		4093 EZ的间谍网络 时间限制: 10 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B ... 
- 洛谷—— P1262 间谍网络
		https://www.luogu.org/problem/show?pid=1262 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A ... 
- 洛谷 P1262 间谍网络 Label: Kosarajn强联通
		题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ... 
- 洛谷P1262间谍网络
		题目 我们首先考虑该题没有环应该怎么做,因为没有环所以是一个DAG,因此直接加上入度为0的罪犯,而有环则可以缩点,之后就成为了DAG,然后用一方法做就好了. \(Code\) #include < ... 
- 洛谷 P1262 间谍网络
		传送门 题目大意:A能揭发B,B能揭发C..某些人可以被收买,如果收买A,那么A,B,C..的情报都可以得到. 求能否得到所有情报,如果可以最少花费多少钱去收买. 题解:tajian缩点 dfs/bf ... 
随机推荐
- Root用户让其他用户运行某程序
			这里以启动tomcat为例 1.安装tomcat不介绍了,自己百度 2.测试能否使用,略 3.创建tomcat用户 useradd tomcat -s /sbin/nologin 创建tomcat,禁 ... 
- php 中全局变量global 的使用
			简介 即使开发一个新的大型PHP程序,你也不可避免的要使用到全局数据,因为有些数据是需要用到你的代码的不同部分的.一些常见的全局数据有:程序设定类.数 据库连接类.用户资料等等.有很多方法能够使这些数 ... 
- web前端与后台数据访问的对象封装
			前言:通常情况下,在不使用angularJS/nodeJS/react等这类完整性的解决方案的js时,前端与后台的异步交互都是使用Ajax技术进行解决 一:作为java web开发工程师可能以下代码是 ... 
- bzoj 4543: [POI2014]Hotel加强版
			Description 给出一棵树求三元组 \((x,y,z)\,,x<y<z\) 满足三个点两两之间距离相等,求三元组的数量 Solution 考虑暴力 \(DP\) 设 \(f[i][ ... 
- 检测SQL Server表占用空间大小SQL
			检测SQL Server表占用空间大小SQL,要先选择需要查询的数据库,然后点击执行下面脚本. ),ROWS ),reserved ) ,Data ) ,index_size ) ,Unused ) ... 
- java ReentrantLock Condition
			sychronized.wait.notify.notifyAll.sleep 在多线程环境下,为了防止多个线程同时调用同一个方法.修改同一份变量,造成数据读取结果混乱,可以使用synchronize ... 
- 那些你常用的JSP知识
			脚本程序 <> 或者,您也可以编写与其等价的XML语句,就像下面这样: <jsp:scriptlet> 代码片段 </jsp:scriptlet>任何文本.HTML ... 
- 探寻hashmap
			Hashmap源码 1. 构造器: a)获得默认数组大小:1>>4 :16 b) 获得负载因子:0.75:衡量hashmap的空间使用程度 i.过大:使用空间更加充分,但是查找效率变低, ... 
- [LeetCode]23. Merge k Sorted Lists合并K个排序链表
			Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity. E ... 
- JS监测鼠标指针位置
			需求1:鼠标移入正方形的时候,蓝色小圆点跟随鼠标滚动(不许蓝色小圆点超出正方形区域),正方形里实时显示当前鼠标相对于body的坐标. <!DOCTYPE html> <html la ... 
