洛谷 P1262 间谍网络
题目大意:A能揭发B,B能揭发C..某些人可以被收买,如果收买A,那么A,B,C..的情报都可以得到。
求能否得到所有情报,如果可以最少花费多少钱去收买。
题解:tajian缩点
dfs/bfs从能收买的人遍历图,如果全部都能遍历,那么可以得
到所有的情报。然后tarjan缩点,并记录缩的每一个点的收买的
最小值,不能收买的人设收买他的花费是正无穷。统计入度为0
的点的收买花费和。
代码:
#include<iostream>
#include<cstdio>
#include<cstring>
#define maxn 3020
#define inf 0x3f3f3f3f
using namespace std; int n,p,r,sumedge,top,tim,sumclr,cnt,ans,tot;
int head[maxn],Stack[maxn],instack[maxn],low[maxn];
int vis[maxn],dfn[maxn],cw[maxn],rd[maxn],w[maxn],bel[maxn]; struct Edge{
int x,y,nxt;
Edge(int x=,int y=,int nxt=):
x(x),y(y),nxt(nxt){}
}edge[maxn*]; void add(int x,int y){
edge[++sumedge]=Edge(x,y,head[x]);
head[x]=sumedge;
} void dfs(int x){
if(vis[x])return;
vis[x]=true;++tot;
for(int i=head[x];i;i=edge[i].nxt){
int v=edge[i].y;
dfs(v);
}
} void Tarjian(int x){
low[x]=dfn[x]=++tim;
Stack[++top]=x;instack[x]=true;
for(int i=head[x];i;i=edge[i].nxt){
int v=edge[i].y;
if(instack[v])low[x]=min(low[x],dfn[v]);
else if(!dfn[v]){
Tarjian(v);low[x]=min(low[x],low[v]);
}
}
if(low[x]==dfn[x]){
sumclr++;cw[sumclr]=inf;
while(Stack[top+]!=x){
bel[Stack[top]]=sumclr;
cw[sumclr]=min(cw[sumclr],w[Stack[top]]);
instack[Stack[top--]]=false;
}
}
} int main(){
scanf("%d%d",&n,&p);
memset(w,0x3f,sizeof(w));
for(int i=;i<=p;i++){
int x,y;
scanf("%d%d",&x,&y);w[x]=y;
}
scanf("%d",&r);
for(int i=;i<=r;i++){
int a,b;
scanf("%d%d",&a,&b);
add(a,b);
}
for(int i=;i<=n;i++)if(w[i]!=inf)dfs(i);
if(tot!=n){
for(int i=;i<=n;i++)
if(vis[i]==){
printf("NO\n");
printf("%d\n",i);
return ;
}
}
for(int i=;i<=n;i++)if(!dfn[i])Tarjian(i);
for(int x=;x<=n;x++){
for(int i=head[x];i;i=edge[i].nxt){
int v=edge[i].y;
if(bel[x]!=bel[v])rd[bel[v]]++;
}
}
for(int i=;i<=sumclr;i++)
if(rd[i]==)ans+=cw[i];
printf("YES\n%d\n",ans);
return ;
}
AC
洛谷 P1262 间谍网络的更多相关文章
- 【题解】洛谷P1262 间谍网络 (强连通分量缩点)
洛谷P1262:https://www.luogu.org/problemnew/show/P1262 思路 一看题目就知道是强连通分量缩点 当图中有强连通分量时 将其缩点 我们可以用dfn数组判断是 ...
- 洛谷——P1262 间谍网络
P1262 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意 ...
- 洛谷 P1262 间谍网络==Codevs 4093 EZ的间谍网络
4093 EZ的间谍网络 时间限制: 10 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B ...
- 洛谷P1262 间谍网络[强连通分量 BFS]
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
- 洛谷 P1262 间谍网络 Label: Kosarajn强联通
题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意交出手中掌握的全部情报 ...
- 洛谷P1262 间谍网络
本来只想刷道小题,没想到还有点麻烦 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美 ...
- 洛谷P1262间谍网络
题目 我们首先考虑该题没有环应该怎么做,因为没有环所以是一个DAG,因此直接加上入度为0的罪犯,而有环则可以缩点,之后就成为了DAG,然后用一方法做就好了. \(Code\) #include < ...
- 洛谷 P1262 间谍网络 —— 缩点
题目:https://www.luogu.org/problemnew/show/P1262 首先,一个强连通分量里有一个点被控制则所有点都被控制,所以先 tarjan 缩点,记一下每个连通块中能被收 ...
- 洛谷—— P1262 间谍网络
https://www.luogu.org/problem/show?pid=1262 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A ...
随机推荐
- Nginx URL跳转
配置需求 注:$document_uri 表示访问的url 需求:访问 www.abc.com 请求到 www.abc.com/abc/ 使用操作 1.在nginx配置文件中加入 if ($doc ...
- ssi include返回404页面
项目中index.html中包含<!--#include virtual="/commonfrag/djdzkan/recomm_www_info.inc" --> ...
- pycharm中创建并设置docker解释器
在Windows上使用Docker的其中一个目的是使其与PyCharm结合,形成Python代码的解释器,避免重复的Python解释环境搭建的问题,同时保持Windows开发环境和部署环境所用的Pyt ...
- Maven:如何在eclipse里新建一个Maven的java项目和web项目
如何在eclipse里新建一个Maven的java项目和web项目: 一:java项目 New-->Other-->Maven 右击项目-->properties,修改以下文件: ① ...
- Linux中df命令查询磁盘信息和fdisk命令分区的用法
df - 报告文件系统磁盘空间的使用情况 总览 df [OPTION]... [FILE]... POSIX 选项: [-kP] GNU 选项 (最短方式): [-ahHiklmPv] [-t fs ...
- jsp——js事件修改属性样式的两种方法(直接赋值、修改属性)、验证表单符合某要求、阻止表单提交、告诉浏览器不要缓存
代码 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncodi ...
- Linux 利用管道父子进程间传递数据
[原文] fork()函数:用于创建子进程,子进程完全复制父进程的资源,相当于父进程的拷贝.具体理解,运用父进程的同一套代码,通过判断进程ID来执行不同进程的不同任务. 返回值正常为子进程ID,出错返 ...
- Mac OS X 下部分Android手机无法连接adb问题之解决方案
[原文] 时至当今,Android山寨手机厂商已如此之多,能修改和个性化定制Android OS的能人已是多如牛毛,有的牛人修改Android系统只会影响所修改的点,不会影响其它,然后还有的就不多说 ...
- Origin软件作图留白过多问题解决
解决空白过大方法:1.Tools——>Options2.Page——>Copy page setting——>Margin默认是Page,下拉菜单选Border,Clip Borde ...
- java加载jdbc驱动三种方式的比较
一.引言 平时连接数据库的时候首先要加载jdbc驱动,这一步骤其实有三种方式,他们的区别?优劣? 二.快速了解三种加载方式 Class.forName(“com.mysql.jdbc.Driver”) ...