JZOJ 4253.QYQ在艾泽拉斯
\(\text{Problem}\)
有向不联通图,求每个子图至多选出一条最大权值和的路径,求前 \(k+1\) 个
\(\text{Solution}\)
显然将每个子图缩点后 \(dp\),排序 \(dp\) 值即可
很多细节要处理
\(\text{Code}\)
#include<cstdio>
#include<algorithm>
#define re register
using namespace std;
const int N = 1e5 + 5, M = 1e6 + 5;
int n, m, k, a[N], Q[N], len;
struct edge{
int to, nxt;
}e[M], E[M], _e[M];
int h[N], H[N], _h[N];
inline void add(int x, int y)
{
static int tot = 0;
e[++tot] = edge{y, h[x]}, h[x] = tot;
}
inline void Add(int x, int y)
{
static int Tot = 0;
E[++Tot] = edge{y, H[x]}, H[x] = Tot;
}
inline void _add(int x, int y)
{
static int _tot = 0;
_e[++_tot] = edge{y, _h[x]}, _h[x] = _tot;
}
int bz[N];
void find(int x)
{
Q[++len] = x, bz[x] = 1;
for(re int i = H[x]; i; i = E[i].nxt)
{
int v = E[i].to;
if (bz[v]) continue;
find(v);
}
}
int dfn[N], low[N], vis[N], st[N], top, dfc, col[N], color;
void tarjan(int x)
{
st[++top] = x, dfn[x] = low[x] = ++dfc, vis[x] = 1;
for(re int i = h[x]; i; i = e[i].nxt)
{
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], dfn[v]);
}
if (low[x] == dfn[x])
{
col[x] = ++color, vis[x] = 0;
while (st[top] != x) col[st[top]] = color, vis[st[top]] = 0, --top;
--top;
}
}
int _Q[N], f[N], g[N], cnt, in[N], _in[N], cur, val[N];
inline void topu()
{
for(re int i = 1; i <= len; i++)
{
val[col[Q[i]]] += a[Q[i]];
for(re int j = h[Q[i]]; j; j = e[j].nxt)
if (col[e[j].to] != col[Q[i]]) _add(col[Q[i]], col[e[j].to]);
}
for(re int i = cur + 1; i <= color; i++)
for(re int j = _h[i]; j; j = _e[j].nxt) _in[_e[j].to]++;
int head = 0, tail = 0;
for(re int i = cur + 1; i <= color; i++)
{
f[i] = val[i];
if (!_in[i]) _Q[++tail] = i;
}
while (head < tail)
{
int now = _Q[++head];
for(re int i = _h[now]; i; i = _e[i].nxt)
{
f[_e[i].to] = max(f[_e[i].to], f[now] + val[_e[i].to]), --_in[_e[i].to];
if (!_in[_e[i].to]) _Q[++tail] = _e[i].to;
}
}
++cnt;
for(re int i = cur + 1; i <= color; i++) g[cnt] = max(g[cnt], f[i]);
cur = color;
}
int main()
{
freopen("azeroth.in", "r", stdin);
freopen("azeroth.out", "w", stdout);
scanf("%d%d", &n, &m);
for(re int i = 1, u, v; i <= m; i++)
{
scanf("%d%d", &u, &v);
if (u ^ v) add(u, v), Add(u, v), Add(v, u);
}
for(re int i = 1; i <= n; i++) scanf("%d", &a[i]);
scanf("%d", &k);
for(re int i = 1; i <= n; i++)
if (!bz[i])
{
len = top = 0, find(i);
for(re int j = 1; j <= len; j++)
if (!dfn[Q[j]]) tarjan(Q[j]);
topu();
}
sort(g + 1, g + cnt + 1), ++k;
int ans = 0;
for(re int i = cnt; i && k; --i, --k) ans += g[i];
printf("%d\n", ans);
}
JZOJ 4253.QYQ在艾泽拉斯的更多相关文章
- 一个完整的Installshield安装程序实例—艾泽拉斯之海洋女神出品(四) --高级设置二
原文:一个完整的Installshield安装程序实例-艾泽拉斯之海洋女神出品(四) --高级设置二 上一篇:一个完整的安装程序实例—艾泽拉斯之海洋女神出品(三) --高级设置一4. 根据用户选择的组 ...
- 关于Installshield里一些常见问题的解答—艾泽拉斯之海洋女神出品
原文:关于Installshield里一些常见问题的解答-艾泽拉斯之海洋女神出品 上一篇:一个完整的安装程序实例—艾泽拉斯之海洋女神出品(五) --补遗转载时请务必保留转载出处和由艾泽拉斯之海洋女神出 ...
- (jzoj snow的追寻)线段树维护树的直径
jzoj snow的追寻 DFS序上搞 合并暴力和,记录最长链和当前最远点,距离跑LCA # include <stdio.h> # include <stdlib.h> # ...
- [jzoj]3506.【NOIP2013模拟11.4A组】善良的精灵(fairy)(深度优先生成树)
Link https://jzoj.net/senior/#main/show/3506 Description 从前有一个善良的精灵. 一天,一个年轻人B找到她并请他预言他的未来.这个精灵透过他的水 ...
- [jzoj]3468.【NOIP2013模拟联考7】OSU!(osu)
Link https://jzoj.net/senior/#main/show/3468 Description osu 是一款群众喜闻乐见的休闲软件. 我们可以把osu的规则简化与改编成以下的样子: ...
- [jzoj]5478.【NOIP2017提高组正式赛】列队
Link https://jzoj.net/senior/#main/show/5478 Description Sylvia 是一个热爱学习的女孩子. 前段时间,Sylvia 参加了学校 ...
- [jzoj]1115.【HNOI2008】GT考试
Link https://jzoj.net/senior/#main/show/1115 Description 申准备报名参加GT考试,准考证号为n位数X1X2X3...Xn-1Xn(0<=X ...
- [jzoj]2538.【NOIP2009TG】Hankson 的趣味题
Link https://jzoj.net/senior/#main/show/2538 Description Hanks 博士是BT (Bio-Tech,生物技术) 领域的知名专家,他的儿子名叫H ...
- [jzoj]4216.【NOIP2015模拟9.12】平方和
Link https://jzoj.net/senior/#main/show/4216 Description 给出一个N个整数构成的序列,有M次操作,每次操作有一下三种: ①Insert Y X, ...
- [jzoj]2938.【NOIP2012模拟8.9】分割田地
Link https://jzoj.net/senior/#main/show/2938 Description 地主某君有一块由2×n个栅格组成的土地,有k个儿子,现在地主快要终老了,要把这些土地分 ...
随机推荐
- 关于小米mini路由器开启ssh红灯解决
前言 小米 后续版本 对 ssh固件校验失败导致的,下载路由器旧版开发版固件,然后用后台web升级成老版本后,再采用官方方法刷入即可. 旧版路由器固件下载 地址 其他 后续的刷机可以参考我的文章
- websockets的原理
一.应用场景 http 协议 客户端发起请求的时候才会返回内容,如果要处理类似于聊天室的应用,需要客户端不间断的发起请求(轮询),非常占用服务器的性能.所以websocket出现了. 二.ws(wss ...
- angr_ctf——从0学习angr(一):angr简介与核心概念
我在学习angr时,先是阅读了开发者发布在IEEE上的论文IEEE Xplore Full-Text PDF:该文章讲述了自动化漏洞挖掘的背景和方法,并对angr的架构和核心模块进行了介绍,非常经典值 ...
- LeetCode HOT 100:组合总和
题目:39. 组合总和 题目描述: 给你一个没有重复元素的数组,和一个target目标值,返回数组中可以使数字和为目标数target的所有不同组合.什么叫组合?组合就是数组中任意数字组成的集合,不需要 ...
- 前段知识之CSS
目录 CSS层叠样式表 CSS语法结构: CSS注释语法 引入css的多种方式 CSS选择器 1. CSS基本选择器 2. CSS组合选择器 3. 分组与嵌套 4. 属性选择器 5. 伪类选择器 6. ...
- python里面一些零碎知识点
1. Python中反斜杠可以用在一行结尾做续行符使用. 2. pytorch中,一般来说如果对tensor的一个函数后加上了下划线,则表明这是一个in-place类型.in-place类型是指,当在 ...
- mysql 1366 - Incorrect string value
mysql 插入中文时报错 mysql 1366 - Incorrect string value... 这是由于 数据库 / 表 / 表字段 编码格式未设置好造成的 解决办法: 1.查看编码是否符 ...
- Java线程诊断
1.诊断CPU占用过高 [root@master ~]# nohup java -jar JvmProject.jar & // 有问题的java程序 [1] 1627 [root@maste ...
- 【大型软件开发】浅谈大型Qt软件开发(二)面向未来开发——来自未来的技术:COM组件。我如何做到让我们的教学模块像插件一样即插即用,以及为什么这么做。
前言 最近我们项目部的核心产品正在进行重构,然后又是年底了,除了开发工作之外项目并不紧急,加上加班时间混不够了....所以就忙里偷闲把整个项目的开发思路聊一下,以供参考. 鉴于接下来的一年我要进行这个 ...
- hashlib 模块 subprocess 模块 logging日志模块
今日内容 hashlib加密模块 1.何为加密 将明文数据处理成密文数据 让人看不懂 2.为什么加密 保证数据的安全 3.如何判断数据是否加密的 一串没有规律的字符串(数字.字母.符号) 4.密文的长 ...