bzoj5329 战略游戏
有一个圆方树,每次给出一个点集,询问虚树上圆点数量-询问点数量
sol:题意读懂就很简单了...可以建虚树dp
也可以考虑每一条链对答案的贡献,最后要注意单独计算虚树根对答案的贡献
#pragma GCC optimize("-funsafe-loop-optimizations")
#pragma GCC optimize("-funroll-loops")
#pragma GCC optimize("-fwhole-program")
#pragma GCC optimize("Ofast,no-stack-protector")
#pragma GCC optimize("-fthread-jumps")
#pragma GCC optimize("-falign-functions")
#pragma GCC optimize("-falign-jumps")
#pragma GCC optimize("-falign-loops")
#pragma GCC optimize("-falign-labels")
#pragma GCC optimize("-fcaller-saves")
#pragma GCC optimize("-fcrossjumping")
#pragma GCC optimize("-fcse-follow-jumps")
#pragma GCC optimize("-fcse-skip-blocks")
#pragma GCC optimize("-fdelete-null-pointer-checks")
#pragma GCC optimize("-fdevirtualize")
#pragma GCC optimize("-fexpensive-optimizations")
#pragma GCC optimize("-fgcse")
#pragma GCC optimize("-fgcse-lm")
#pragma GCC optimize("-fhoist-adjacent-loads")
#pragma GCC optimize("-finline-small-functions")
#pragma GCC optimize("-findirect-inlining")
#pragma GCC optimize("-fipa-sra")
#pragma GCC optimize("-foptimize-sibling-calls")
#pragma GCC optimize("-fpartial-inlining")
#pragma GCC optimize("-fpeephole2")
#pragma GCC optimize("-freorder-blocks")
#pragma GCC optimize("-freorder-functions")
#pragma GCC optimize("-frerun-cse-after-loop")
#pragma GCC optimize("-fsched-interblock")
#pragma GCC optimize("-fsched-spec")
#pragma GCC optimize("-fschedule-insns")
#pragma GCC optimize("-fschedule-insns2")
#pragma GCC optimize("-fstrict-aliasing")
#pragma GCC optimize("-fstrict-overflow")
#pragma GCC optimize("-ftree-switch-conversion")
#pragma GCC optimize("-ftree-tail-merge")
#pragma GCC optimize("-ftree-pre")
#pragma GCC optimize("-ftree-vrp")
#pragma GCC target("avx")
#include<bits/stdc++.h>
#define LL long long
using namespace std;
#define gtchar() (p1==p2&&(p2=(p1=buf)+fread(buf,1,1000000,stdin),p1==p2)?EOF:*p1++)
static char buf[],*p1=buf,*p2=buf;
inline int read()
{
int x = ,f = ;char ch = gtchar();
for(;!isdigit(ch);ch = gtchar())if(ch == '-')f = -f;
for(;isdigit(ch);ch = gtchar())x = * x + ch - '';
return x * f;
}
int n,m;
const int maxn = 2e5 + ;
vector<int> G[maxn],Tree[maxn];
int dfn[maxn],low[maxn],_tim,stk[maxn],top,vis[maxn];
int tot;
inline void write(int x,char opt = )
{
int t=,len=; while(t<=x)t*=,len++;
while(len--)t/=,putchar(x/t+),x%=t;
if(opt)putchar(opt);
return;
}
inline void Tarjan(int x,int fa)
{
dfn[x] = low[x] = ++_tim;stk[++top] = x;vis[x] = ;
for(auto targ : G[x])
{
if(targ == fa)continue;
if(!vis[targ])
{
Tarjan(targ,x);
low[x] = min(low[x],low[targ]);
if(low[targ] >= dfn[x])
{
tot++;
Tree[x].push_back(tot);
do
{
Tree[tot].push_back(stk[top]);
}while(targ != stk[top--]);
}
}
else low[x] = min(low[x],dfn[targ]);
}
}
int s[maxn];
int fa[maxn],dep[maxn],size[maxn],bl[maxn],dis[maxn];
inline void dfs1(int x)
{
size[x] = ;
for(auto targ : Tree[x])
{
if(targ == fa[x])continue;
fa[targ] = x;
dis[targ] = dis[x] + (targ <= n);
dep[targ] = dep[x] + ;
dfs1(targ);
size[x] += size[targ];
}
}
inline void dfs2(int x,int col)
{
int k = ;
bl[x] = col;dfn[x] = ++_tim;
for(auto targ : Tree[x])
if(dep[targ] > dep[x] && size[targ] > size[k])k = targ;
if(!k){low[x] = _tim;return;}
dfs2(k,col);
for(auto targ : Tree[x])
if(dep[targ] > dep[x] && targ != k)dfs2(targ,targ);
low[x] = _tim;
}
inline int lca(int x,int y)
{
while(bl[x] != bl[y])
{
if(dep[bl[x]] < dep[bl[y]])swap(x,y);
x = fa[bl[x]];
}
return dep[x] < dep[y] ? x : y;
}
int q[maxn];
int main()
{
int T = read();
while(T--)
{
_tim = ;
tot = n = read();m = read();
for(int i=;i<maxn;i++)G[i].clear(),Tree[i].clear();
memset(dfn,,sizeof(dfn));
memset(low,,sizeof(low));
memset(vis,,sizeof(vis));
for(int i=;i<=m;i++)
{
int u = read(),v = read();
G[u].push_back(v);G[v].push_back(u);
}
for(int i=;i<=n;i++)if(!dfn[i])Tarjan(i,);
int ques = read();_tim = ;dis[] = ;dfs1(),dfs2(,);
while(ques--)
{
int len = read();int k = len,top = ,ans = ;
for(int i=;i<=len;i++)s[i] = read();
sort(s + ,s + len + ,[](int u,int v){return dfn[u] < dfn[v];});
for(int i=;i<k;i++)s[++len] = lca(s[i],s[i + ]);
sort(s + ,s + len + ,[](int u,int v){return dfn[u] < dfn[v];});
len = unique(s + ,s + len + ) - (s + );
if(s[] <= n)ans = ;
else ans = ;
for(int i=;i<=len;i++)
{
while(top && low[q[top]] < dfn[s[i]])top--;
if(top)ans += (dis[s[i]] - dis[q[top]]);
q[++top] = s[i];
}
write(ans - k,'\n');
}
}
}
bzoj5329 战略游戏的更多相关文章
- 【BZOJ5329】【SDOI2018】战略游戏(圆方树,虚树)
[BZOJ5329][SDOI2018]战略游戏(圆方树,虚树) 题面 BZOJ 洛谷 Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战 ...
- BZOJ5329:[SDOI2018]战略游戏(圆方树,虚树)
Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战略游戏的地图由n个城市以及m条连接这些城市的双向道路构成,并且从任意一个城市出发总能沿着 ...
- [BZOJ5329][SDOI2018]战略游戏
bzoj luogu Description 省选临近,放飞自我的小Q无心刷题,于是怂恿小C和他一起颓废,玩起了一款战略游戏. 这款战略游戏的地图由n个城市以及m条连接这些城市的双向道路构成,并且从任 ...
- BZOJ5329: [SDOI2018]战略游戏——题解
https://www.lydsy.com/JudgeOnline/problem.php?id=5329 https://www.luogu.org/problemnew/show/P4606 省选 ...
- [bzoj5329] P4606 [SDOI2018]战略游戏
P4606 [SDOI2018]战略游戏:广义圆方树 其实会了圆方树就不难,达不到黑,最多算个紫 那个转换到圆方树上以后的处理方法,画画图就能看出来,所以做图论题一定要多画图,并把图画清楚点啊!! 但 ...
- D3D游戏编程系列(三):自己动手编写即时战略游戏之寻路
说起即时战略游戏,不得不提的一个问题是如何把一个物体从一个位置移动到另一个位置,当然,我说的不是瞬移,而是一个移动的过程,那么在这个移动的过程中我们如何来规划路线呢,这就不得不提到寻路了. 我所了解到 ...
- 【BZOJ3924】幻想乡战略游戏(动态点分治)
[BZOJ3924]幻想乡战略游戏(动态点分治) 题面 权限题...(穷死我了) 洛谷 题解 考虑不修改 发现一个贪心的做法 假设当前放在当前位置 如果它有一个子树的兵的总数大于总数的一半 那么,放到 ...
- 『战略游戏 最大利润 树形DP』
通过两道简单的例题,我们来重新认识树形DP. 战略游戏(luoguP1026) Description Bob喜欢玩电脑游戏,特别是战略游戏.但是他经常无法找到快速玩过游戏的办法.现在他有个问题.他要 ...
- LOJ2135 「ZJOI2015」幻想乡战略游戏
题意 题目描述 傲娇少女幽香正在玩一个非常有趣的战略类游戏,本来这个游戏的地图其实还不算太大,幽香还能管得过来,但是不知道为什么现在的网游厂商把游戏的地图越做越大,以至于幽香一眼根本看不过来,更别说和 ...
随机推荐
- poj2115[扩展欧几里德]
C Looooops Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 22260 Accepted: 6125 Descr ...
- 九度OJ 1346:会员积分排序 (排序)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:967 解决:413 题目描述: 元旦佳节快到了,超市A想要给会员一些奖品.但是奖品有限,所以它需要给这些会员做一个排序,然后将名单输出来.排 ...
- java的小知识点
1 获取当前路径 System.getProperty("user.dir") System.getProperty()参数大全# java.version ...
- PhotoKit type类型
参考链接: https://www.jianshu.com/p/42e5d2f75452/ 1.获取图像类型 enum PHAssetCollectionType : Int { case Album ...
- 算法调参 weight_ratio, weight_seqratio
from openpyxl import Workbook import xlrd import time import Levenshtein as Le target_city_list = [' ...
- PAT 1057. 数零壹(20)
给定一串长度不超过105的字符串,本题要求你将其中所有英文字母的序号(字母a-z对应序号1-26,不分大小写)相加,得到整数N,然后再分析一下N的二进制表示中有多少0.多少1.例如给定字符串“PAT ...
- eclispse + tomcat 启动是不加载项目的解决办法
有一个java spring的项目一直好好的,突然一天不能启动了.eclipse的console没有报任何错误,相关的server配置也没有问题,经过一翻折腾顺便还把eclipse从indigo升级到 ...
- 11.2.3 Redis的启动停止
11.2.3 Redis的启动停止 Redis安装配置完成后,启动过程非常简单,执行命令/usr/local/redis/bin/redis-server /usr/local/redis/etc/ ...
- 基于CocoaPods的iOS项目模块化实践
什么是CocoaPods? CocoaPods is a dependency manager for Swift and Objective-C Cocoa projects. It has ove ...
- 数据库 简单查询 Sql Server 学生表 课程表 选课表
创建教材中的三张表格,并输入相应的数据 Create table student( Sno char(9), Same char(20), Ssex char(2), Sage smallint, S ...