【gmoj】 【tarjan】 【拓扑】【并查集】 QYQ在艾泽拉斯

题目



解题思路

因为可能出现环用tarjan缩点
再建一个新图
用按拓扑序跑一边DP
求出一个连通块中从哪个点跑出来的价值最大
k次闪现可以看作可以跑k+1个连通块
排完序后,取出前k+1大求和即为答案


代码

#include<algorithm>
#include<iostream>
#include<cstdio>
#include<queue>
using namespace std;
const int N=100010;
queue<int> qd;
struct lzf{int x,to,next;
}f[10*N],h[10*N];
int t,n,m,x,y,k,t2,da,tot,cnt;
int rd[N],a[N],p[N],d[N],q[N],zc[N],bj[N],fa[N];
int head[N],head2[N],dfn[N],low[N],ans[N];void add(int x,int y)
{f[++t].to=y;f[t].x=x;f[t].next=head[x];head[x]=t;
}void add2(int x,int y)
{h[++t2].to=y;h[t2].next=head2[x];head2[x]=t2;
}void tarjan(int x)
{dfn[x]=low[x]=++tot; q[++t]=x;p[x]=1;for (int i=head[x];i;i=f[i].next)if (!dfn[f[i].to]){tarjan(f[i].to);low[x]=min(low[x],low[f[i].to]);}else if (p[f[i].to]) low[x]=min(low[x],dfn[f[i].to]);if (dfn[x]==low[x]){cnt++; do{y=q[t--];p[y]=0;zc[cnt]+=a[y]; bj[y]=cnt;}while (y!=x); }
}int find(int x)
{if (fa[x]==x) return x;else return fa[x]=find(fa[x]);
}void solve()
{   while (!qd.empty()){  int x=qd.front();qd.pop();int fx=find(x);d[x]+=zc[x];ans[fx]=max(ans[fx],d[x]);for (int j=head2[x];j;j=h[j].next){rd[h[j].to]--;d[h[j].to]=max(d[x],d[h[j].to]);if (!rd[h[j].to]) qd.push(h[j].to);}}
}int main()
{freopen("azeroth.in","r",stdin);freopen("azeroth.out","w",stdout);scanf("%d%d",&n,&m);for (int i=1;i<=m;i++){scanf("%d%d",&x,&y);add(x,y);}for (int i=1;i<=n;i++) scanf("%d",&a[i]);scanf("%d",&k);t=0;for (int i=1;i<=n;i++)if (!dfn[i])tarjan(i);  //缩点for (int i=1;i<=cnt;i++) fa[i]=i; for (int i=1;i<=m;i++){x=bj[f[i].x],y=bj[f[i].to];if (x==y) continue;int fx=find(fa[x]),fy=find(fa[y]);  //用并查集判断是否在同一个连通块if (fx!=fy) fa[fx]=fy;add2(x,y);  //建新图rd[y]++;  //统计入度}for (int i=1;i<=cnt;i++)if (!rd[i]) qd.push(i);  solve();  //拓扑跑DPsort(ans+1,ans+cnt+1); for (int i=cnt;i>=max(cnt-k,1);i--)da+=ans[i];printf("%d",da);return 0;
}

【gmoj】 【tarjan】 【拓扑】 【并查集】 QYQ在艾泽拉斯相关推荐

  1. POJ 3694 Network(tarjan+lca+并查集)

    题目 给定一张NNN个点MMM条边的无向连通图,然后执行QQQ次操作,每次向图中添加一条边,并且询问当前无向图中"桥"的数量. 题解 先求出图中所有的边双,然后缩点 令c[x],c ...

  2. HDU5438 Ponds 拓扑+并查集

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5438 题目大意:n个顶点m条边的无向图,每个顶点有一个权值,现在要删除所有的叶子节点,重复此操作直至形 ...

  3. POJ 并查集 题目汇总 ——czyuan原创(转)

    继续数据结构的复习,本次的专题是:并查集. 并查集,顾名思义,干的就是"并"和"查"两件事.很多与集合相关的操作都可以用并查集高效的解决. 两个操作代码:    ...

  4. 拓扑排序题集【夏天的风】

    [HDU] 1285 确定比赛名次 2094 产生冠军 2647 Reward 3342 Legal or Not 1811 Rank of Tetris  拓扑+并查集 3231  Box Rela ...

  5. [拓扑排序][DP][Tarjan][并查集]JZOJ 4253 QYQ在艾泽拉斯

    Description 在艾泽拉斯的无尽之海里,有着一群不为人知的由各个种族的冒险者统治的岛屿,这些岛屿都很庞大,足以在上面建造许多的城市,城市之间有一些单向道路连接. 有一天,QYQ无意中发现了这些 ...

  6. QYQ在艾泽拉斯(并查集)(Tarjan)(拓扑序DP)

    QYQ在艾泽拉斯 题目大意 给你一个有向图,然后定义一个区域是将有向边看做无向边所形成的连通块. 然后你可以选 K+1 个区域,从任意点出发走到任意点. 然后点有点权,要你最大化点权和. 思路 看到有 ...

  7. 【蓝桥杯官网试题 - 历届试题】发现环(dfs+并查集,或无向图tarjan判环,无向环,或拓扑排序)

    题干: 问题描述 小明的实验室有N台电脑,编号1~N.原本这N台电脑之间有N-1条数据链接相连,恰好构成一个树形网络.在树形网络上,任意两台电脑之间有唯一的路径相连. 不过在最近一次维护网络时,管理员 ...

  8. 2021.8.9【提高B组模拟1】T2 QYQ在艾泽拉斯(Tarjan强连通分量)(并查集)

    QYQ在艾泽拉斯 题目大意 输入样例 3 2 1 2 3 1 1 2 1 0 输出样例 4 样例说明: QYQ从3号点开始,走到2号点,最后走到1号点,结束旅程,共获得1+2+1=4价值的宝物 题目数 ...

  9. (纪中)4253. QYQ在艾泽拉斯【Tarjan】【拓扑DP】

    解题思路 题目大意是给你一个有向图,选择 k + 1 k+1 k+1个能获取最大价值的联通块的价值总和. 显然 T a r j a n 缩 点 + 拓 扑 D P Tarjan缩点+拓扑DP Tarj ...

最新文章

  1. 《libGDX移动游戏开发从入门到精通》一第2章 libGDX的架构分析
  2. 简洁的描述SpringMVC工作流程
  3. 第三个spring冲刺第5、6、7天(三天汇总)
  4. skb_shinfo(skb)-dataref 含义
  5. Redis过期策略及实现原理
  6. window.onbeforeunload() 事件调用ajax的解决方法
  7. python画星空的程序_用python画星空源代码是什么?
  8. 机器人绳索英雄下载苹果手机_警察机器人绳索英雄游戏下载-警察机器人绳索英雄苹果版v1.0-FC游戏网...
  9. html5.0笔记,动易sf5.0标签笔记.doc
  10. [转载] Java为什么不允许覆盖静态方法?
  11. Java的日期类说明Calendar、Data、日期转化格式化以及注意事项
  12. xmind可以画流程图吗_如何用xmind做流程图
  13. 软件工程实验报告三--需求分析及文档编写
  14. python在线编辑器
  15. Axure RP 8的用途和使用
  16. Omni-ID 推出2款有源RFID标签
  17. java画布canvas_画布(Canvas类)初探
  18. Tik Tok怎么赚钱?零基础电商卖家新手快速入行指南
  19. MyBatis系列:mybatis用foreach循环添加多条数据!
  20. 宏定义有无参数宏定义和带参数宏定义两种

热门文章

  1. 10分钟教会你原生JS压缩图片,极其精简版
  2. springboot项目层次结构_spring boot项目结构
  3. Java 实现 Redis集群操作
  4. 简单理解海明码(汉明码)纠错原理
  5. 数据库视频第17~21章的学习框架和笔记
  6. Warning: can't write resource [META-INF/MANIFEST.MF] (Duplicate zip entry [yyy.jar:META-INF/MANIFEST
  7. STM32-串口通信(串口的接收和发送)
  8. Python实训 姓名大作战
  9. py获取《灵笼》第一集的弹幕———绘制词云图
  10. 【小程序】模板与配置