【luogu P1262 间谍网络】 题解
题目链接:https://www.luogu.org/problemnew/show/P1262
注意:
1.缩点时计算出入度是在缩完点的图上用color计算。不要在原来的点上计算。
2.枚举出入度时是在缩完点的图上计算。枚举范围到num。
#include <stack>
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
const int maxn = 10000 + 10;
struct edge{
int from, next, to, len;
}e[maxn<<2];
int head[maxn], cnt;
int dfn[maxn], low[maxn], tim, color[maxn], num, rudu[maxn];
stack<int> s;
bool vis[maxn], okbuy[maxn], flag[maxn];
int n, p, m, money[maxn], minpay[maxn], ans;
void add(int u, int v)
{
e[++cnt].from = u;
e[cnt].next = head[u];
e[cnt].to = v;
head[u] = cnt;
}
void tarjan(int x)
{
dfn[x] = low[x] = ++tim;
s.push(x); vis[x] = 1;
for(int i = head[x]; i != -1; i = e[i].next)
{
int v = e[i].to;
if(!dfn[v])
{
tarjan(v);
low[x] = min(low[x], low[v]);
}
else if(vis[v])
{
low[x] = min(low[x], low[v]);
}
}
if(low[x] == dfn[x])
{
color[x] = ++num;
vis[x] = 0;
minpay[num] = min(minpay[num], money[x]);
while(s.top() != x)
{
color[s.top()] = num;
vis[s.top()] = 0;
minpay[num] = min(minpay[num], money[s.top()]);
s.pop();
}
s.pop();
}
}
int main()
{
memset(head, -1, sizeof(head));
scanf("%d%d",&n,&p);
for(int i = 1; i <= n; i++) minpay[i] = 0x7fffffff, money[i] = 0x7fffffff;
for(int i = 1; i <= p; i++)
{
int u, val;
scanf("%d%d",&u,&val);
okbuy[u] = 1;
money[u] = val;
}
scanf("%d",&m);
for(int i = 1; i <= m; i++)
{
int u, v;
scanf("%d%d",&u,&v);
add(u,v);
}
for(int i = 1; i <= n; i++)
if(!dfn[i] && okbuy[i] == 1) tarjan(i);
for(int i = 1; i <= n; i++)
if(!dfn[i])
{
printf("NO\n%d",i);
return 0;
}
for(int i = 1; i <= n; i++)
for(int j = head[i]; j != -1; j = e[j].next)
{
int v = e[j].to;
if(color[v] != color[i])
{
rudu[color[v]]++;
}
}
for(int i = 1; i <= num; i++)
{
if(rudu[i] == 0)
ans += minpay[i];
}
printf("YES\n%d\n",ans);
return 0;
}
【luogu P1262 间谍网络】 题解的更多相关文章
- Luogu P1262 间谍网络 【强连通分量/缩点】By cellur925
题目传送门 真是一道好题呀~~~~qwq 知道这题是tarjan,但是想了很久怎么用上强连通分量.因为样例们...它显然并不是一个强联通分量! (被样例迷惑的最好例子) 然后...就没有然后了...感 ...
- luogu P1262 间谍网络
嘟嘟嘟 建图还是很明显的. 接着分两种情况: 1.图中不存在环:那么只要收买那些入度为0的点.如果这些点有的不能收买.就不能控制所有间谍. 2.图中存在环,那么对于这些在环中的点,我们只要收买数额最少 ...
- Luogu P2002 消息扩散&&P1262 间谍网络
怕自己太久没写Tarjan了就会把这种神仙算法忘掉. 其实这种类型的图论题的套路还是比较简单且显然的. P2002 消息扩散 很显然的题目,因为在一个环(其实就是强连通分量)中的城市都只需要让其中一个 ...
- 洛谷——P1262 间谍网络
P1262 间谍网络 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A可以揭发B.有些间谍收受贿赂,只要给他们一定数量的美元,他们就愿意 ...
- P1262 间谍网络
传送门 思路: ①在 Tarjan 的基础上加一个 belong 记录每个点属于哪个强连通分量. ②存图完成后,暴力地遍历全图,查找是否要间谍不愿受贿. inline void dfs(int u) ...
- 洛谷 P1262 间谍网络==Codevs 4093 EZ的间谍网络
4093 EZ的间谍网络 时间限制: 10 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B ...
- 【题解】洛谷P1262 间谍网络 (强连通分量缩点)
洛谷P1262:https://www.luogu.org/problemnew/show/P1262 思路 一看题目就知道是强连通分量缩点 当图中有强连通分量时 将其缩点 我们可以用dfn数组判断是 ...
- 洛谷 P1262 间谍网络 —— 缩点
题目:https://www.luogu.org/problemnew/show/P1262 首先,一个强连通分量里有一个点被控制则所有点都被控制,所以先 tarjan 缩点,记一下每个连通块中能被收 ...
- 洛谷—— P1262 间谍网络
https://www.luogu.org/problem/show?pid=1262 题目描述 由于外国间谍的大量渗入,国家安全正处于高度的危机之中.如果A间谍手中掌握着关于B间谍的犯罪证据,则称A ...
随机推荐
- [Matlab] Galois Field arrays
Operations supported for Galois Field arrays: + - - Addition and subtraction of Galois arrays. * / \ ...
- 获取全球dns统计信息
# -*- coding:UTF-8 -*- import requests, time import json from bs4 import BeautifulSoup as bp t3 = ti ...
- net 预览文件 转换文件
预览SWF文件 swfobject.js (google浏览器 会阻止 需设置) @{ ViewBag.Title = "PdfPreview"; Layout = " ...
- 序列化json和protobuf大小比较
使用protobuf序列化为二进制和json序列化字符串大小比较 代码demo package com.gxf.demo; import java.io.*; public class Ptotobu ...
- Junit入门教程
做开发的时候,完成一个接口.方法.函数或者功能等,需要测试,是否有bug,有逻辑错误.这里有两种方案测试 1. 在main中写测试方法 2. 使用开源框架,这里使用的junit main写测试方法优点 ...
- 【Android】3.0 Android开发环境的搭建(2)——eclipse
1.0模拟机登录后,可能会一直停留在这个界面很久,那就去洗洗澡.睡睡觉.吃吃饭…… 2.0登录后可以在设置中改成中文,这样界面对国人来说比较友好. 3.0 虚拟机首页可以看到有短信息.拨打电话.浏览器 ...
- js中各个排序算法和sort函数的比较
js中要实现数据排序,其实只需要用sort函数就能很好的满足了,但是我今天想知道他和其他排序算法的区别,比如耗时呀等.测了一组数据如下: // ---------- 一些排序算法 Sort = {} ...
- 转:HTML中让图片滚动的<marquee>标签的使用方法
实例: <marquee id="affiche" align="left" behavior="scroll" bgcolor=&q ...
- show与ShowDialog substring
substring public String substring(int beginIndex, int endIndex) 返回一个新字符串,它是此字符串的一个子字符串.该子字符串从指定的 beg ...
- requireJS的优化工具 ---- r.js
requireJS是javascript的模块加载器,是基于AMD规范实现的. r.js是其提供的对模块进行打包和构建的一个工具 下载 r.js 创建r.js 的配置文件 build.js build ...