bzoj 5329 战略游戏
题目大意:
一个无向图 Q个询问 每次给一些点的集合
求有多少个点满足去掉这个点后使这些点的集合中有一个点对不连通
思路:
点双缩点 相当于每次求这些点中的所有路径上的圆点个数
可以将这些点按dfs序排序 每次求a i 和 a i+1两个点路径上的圆点个数
最后答案/2 后减去这些点的个数(因为不能取这些点) 再判断 a i 和a n的lca是否是圆点
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
#include<queue>
#define inf 2139062143
#define ll long long
#define MAXN 400100
#define V1 (g1.to[i])
#define V2 (g2.to[i])
using namespace std;
inline int read()
{
int x=,f=;char ch=getchar();
while(!isdigit(ch)) {if(ch=='-') f=-;ch=getchar();}
while(isdigit(ch)) {x=x*+ch-'';ch=getchar();}
return x*f;
}
int n,m;
int dfn[MAXN],st[MAXN],low[MAXN],top,stp;
int f[MAXN][],dep[MAXN],dis[MAXN];
struct graph
{
int fst[MAXN],nxt[MAXN<<],to[MAXN<<],cnt;
void mem(){memset(fst,,sizeof(fst));cnt=;}
void add(int u,int v) {nxt[++cnt]=fst[u],fst[u]=cnt,to[cnt]=v;}
}g1,g2;
void tarjan(int x)
{
dfn[x]=low[x]=++stp,st[++top]=x;int now=;
for(int i=g1.fst[x];i;i=g1.nxt[i])
if(!dfn[V1])
{
tarjan(V1);low[x]=min(low[x],low[V1]);
if(low[V1]<dfn[x]) continue;m++;
do{now=st[top--];g2.add(m,now);}
while(now!=V1);g2.add(x,m);
}
else low[x]=min(low[x],dfn[V1]);
}
void dfs(int x)
{
dfn[x]=++stp;
for(int i=;(<<i)<=dep[x];i++) f[x][i]=f[f[x][i-]][i-];
for(int i=g2.fst[x];i;i=g2.nxt[i])
{f[V2][]=x,dep[V2]=dep[x]+,dis[V2]=dis[x]+(V2<=n);dfs(V2);}
}
int lca(int a,int b)
{
if(dep[a]<dep[b]) swap(a,b);
int t=dep[a]-dep[b];
for(int i=;i>=;i--) if((<<i)&t) a=f[a][i];
if(a==b) return a;
for(int i=;i>=;i--) if(f[a][i]!=f[b][i]) a=f[a][i],b=f[b][i];
return f[a][];
}
bool cmp(const int &a,const int &b) {return dfn[a]<dfn[b];}
inline int calc(int a,int b) {return dis[a]+dis[b]-(dis[lca(a,b)]<<);}
int main()
{
int T=read(),a,b,k,q,res;
while(T--)
{
g1.mem();g2.mem();memset(dfn,,sizeof(dfn));
memset(f,,sizeof(f));
n=read(),m=read(),stp=top=;
while(m--) {a=read(),b=read();g1.add(a,b);g1.add(b,a);}
m=n;tarjan();dis[]=dep[]=,stp=;dfs();
q=read();
while(q--)
{
k=read(),top=,res=;
while(k--) st[++top]=read();
sort(st+,st+top+,cmp);
for(int i=;i<=top;i++)
res+=calc(st[i],st[i%top+]);
if(lca(st[],st[top])<=n) printf("%d\n",(res+-top*)>>);
else printf("%d\n",(res-top*)>>);
}
}
}
bzoj 5329 战略游戏的更多相关文章
- bzoj 5329: [Sdoi2018]战略游戏
Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战略游戏的地图由n个城市以及m条连接这些城市的双向道路构成,并且从任意一个城市出发总能沿着 ...
- [BZOJ5329][SDOI2018]战略游戏
bzoj luogu Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战略游戏的地图由n个城市以及m条连接这些城市的双向道路构成,并且从任 ...
- 【BZOJ5329】【SDOI2018】战略游戏(圆方树,虚树)
[BZOJ5329][SDOI2018]战略游戏(圆方树,虚树) 题面 BZOJ 洛谷 Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战 ...
- BZOJ5329: [SDOI2018]战略游戏——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5329 https://www.luogu.org/problemnew/show/P4606 省选 ...
- bzoj3924 [Zjoi2015]幻想乡战略游戏 点分树,动态点分
[BZOJ3924][Zjoi2015]幻想乡战略游戏 Description 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网 ...
- bzoj5315/luoguP4517 [SDOI2018]战略游戏(圆方树,虚树)
bzoj5315/luoguP4517 [SDOI2018]战略游戏(圆方树,虚树) bzoj Luogu 题目描述略(太长了) 题解时间 切掉一个点,连通性变化. 上圆方树. $ \sum |S| ...
- D3D游戏编程系列(三):自己动手编写即时战略游戏之寻路
说起即时战略游戏,不得不提的一个问题是如何把一个物体从一个位置移动到另一个位置,当然,我说的不是瞬移,而是一个移动的过程,那么在这个移动的过程中我们如何来规划路线呢,这就不得不提到寻路了. 我所了解到 ...
- 【BZOJ3924】幻想乡战略游戏(动态点分治)
[BZOJ3924]幻想乡战略游戏(动态点分治) 题面 权限题...(穷死我了) 洛谷 题解 考虑不修改 发现一个贪心的做法 假设当前放在当前位置 如果它有一个子树的兵的总数大于总数的一半 那么,放到 ...
- 『战略游戏 最大利润 树形DP』
通过两道简单的例题,我们来重新认识树形DP. 战略游戏(luoguP1026) Description Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题.他要 ...
随机推荐
- 【BZOJ1834】network 网络扩容(最大流,费用流)
题意:给定一张有向图,每条边都有一个容量C和一个扩容费用W.这里扩容费用是指将容量扩大1所需的费用. 求: 1. 在不扩容的情况下,1到N的最大流: 2. 将1到N的最大流增加K所需的最小扩容费用. ...
- python之-微信开发学习
微信公众平台技术文档https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp1445241432# 注意,最好以python3 运行,中文 ...
- Sudoku Killer--hdu1426(数独 跟上一题差不多 但是输入时问题)
http://acm.hdu.edu.cn/showproblem.php?pid=1426 注意输入问题就行 还是dfs #include<stdio.h> #include<st ...
- [Bzoj2500]幸福的道路(树上最远点)
2500: 幸福的道路 Time Limit: 20 Sec Memory Limit: 256 MBSubmit: 474 Solved: 194[Submit][Status][Discuss ...
- Ubuntu 16.04安装Guake Terminal终端(使用一键唤醒功能)
安装: sudo apt-get install guake-indicator sudo apt-get install guake 使用: 先启动guake-indicator,再启动guake. ...
- 【TFS 2017 CI/CD系列 - 01】-- Agent篇
一.环境要求: PowerShell 3.0 或者更高版本 VS2015或者更高版本 二.下载Agent: 用浏览器打开TFS,[Settings]--> [Agent Pools]--> ...
- java 定时备份数据库
原文:http://www.open-open.com/code/view/1447490829678 /** 操作数据库 */ public class BackupDb { public Stri ...
- jmete命令行停止失败的原因分析
1.在jmeter的master机器上使用如下方式启动远程IP地址2.2.2.2,3.3.3.3上的jmeter slave服务,执行到最后生成报告: sh apache-jmeter-3.1/bin ...
- 【stl学习笔记】set、multiset
set和multiset会根据特定的排序准则,自动将元素排序.两者不同处在于multiset允许元素重复而set不允许 在使用set或multiset之前,必须先加入头文件<set> se ...
- 【转】Linux下添加新硬盘,分区及挂载
原文:http://blog.chinaunix.net/uid-25829053-id-3067619.html ------------------------------------------ ...