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喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题.他要 ...
随机推荐
- HDU 3397 双lazy标记的问题
题目大意 对一个只有0和1的序列,支持以下几种操作1.将区间所有的值变成12.将区间所有的值变为03.将区间的0和1翻转(0变成1 1变成0)4.求区间中1的个数5.求区间连续最长的1的个数 http ...
- hdu1059(背包dp二进制优化)
Dividing Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Subm ...
- Linux(2):基础命令
linux 的规则: 1. linux 命令行组成结构:如下 [root@neo ~]# [用户名@主机名 当前工作路径]# ~ 用户的家目录 2. linux系统命令操作语法的格式(命令的样子): ...
- Windows的Java_HOME环境变更配置
Windows的Java_HOME环境变更配置 一般会配置三个环境变更: 1.系统变量 变量名JAVA_HOME 变量值=安装目录,如:C:\Program Files (x86)\Java\jdk ...
- windows环境下SVN服务器限制注释字数
1.)打开版本库的D:\SVN版本库\otpv3\hooks, 2.)然后新建一个文件pre-commit.bat.(该目录下有模板文件:pre-commit.impl,你要是感兴趣可以详细看看). ...
- less的配置和使用
less 的配置: 1.浏览器端的使用 <link rel="stylesheet/less" type="text/css" href="st ...
- msp430项目编程15
msp430中项目---简易红外遥控系统 1.红外工作原理 2.电路原理说明 3.代码(显示部分) 4.代码(功能实现) 5.项目总结 msp430项目编程 msp430入门学习
- ***iOS学习之Table View的简单使用和DEMO示例(共Plain普通+Grouped分组两种)
Table View简单描述: 在iPhone和其他iOS的很多程序中都会看到Table View的出现,除了一般的表格资料展示之外,设置的属性资料往往也用到Table View,Table View ...
- MongoDB学习day07--mongoose入门,数据库增删改查,默认参数,模块化
一.mongoose介绍 Mongoose 是在 node.js 异步环境下对 mongodb 进行便捷操作的对象模型工具. Mongoose 是 NodeJS 的驱动, 不能作为其他语言的驱动. M ...
- Windows如何在cmd命令行中查看、修改、删除与添加、设置环境变量
首先明确一点: 所有的在cmd命令行下对环境变量的修改只对当前窗口有效,不是永久性的修改.也就是说当关闭此cmd命令行窗口后,将不再起作用.永久性修改环境变量的方法有两种:一种是直接修改注册表(此种方 ...