T1

Description



Solution

  • 有待填坑……

T2

Description

  • 给定一个\(h(≤10)\)层、\(n(≤10)\)行、\(m(≤10)\)列的由泥土组成的立方体,挖开\((i,j,k)\)的泥土代价为\(a[i,j,k](\in[0,65536))\),挖开后就可以随意走这个点。一开始在第0层随便一个点,每次可以挖开他正下方、以及他同一层的四连通相邻点。
  • 第\(z\)层有\(K[z](≤9)\)个点必须经过。
  • 求最小代价。

Solution

  • 分层斯坦纳树。但此题有些特殊,它是有向边,如果直接做则斯坦纳树的第一种转移(即状态不同的转移)应该是要枚举一条边的;因此我们可以不连边,而是走到一个点就加上它的点权。
  • 注意到还要考虑其他层的影响;因此我们可以自上而下(自下而上也是一样)地做,每层都新建一个特殊必经点,表示它当前层上面所有层的总和,然后要根据它第一次走到的点来定夺附加点权。
  • 这样做的话,时间复杂度就是\(O(nm\sum_{z=1}^h2^{K[z]})\)的了。

Code

#include <cstdio>
#include <cstring>
#include <algorithm>
#define MIN(x,y) if(x>y)x=y
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std; const int H=11,N=H*H,inf=0x3f3f3f3f;
int h,n,m,n1,a[H][N],K,x,y,X[H],f[1024][N],g[N],hd,tl,d[N*N],ans;
bool p[N]; bool go(int x,int y) {return x%m^1&&y==x-1||x%m&&y==x+1||y==x-m||y==x+m;} void spfa(int dep,int S)
{
while(hd<tl)
{
int x=d[++hd];
fo(y,1,n1)
if(!x||go(x,y))
{
int len=a[dep][y]+(!x&&dep>1?g[y]:0);
if(f[S][y]>f[S][x]+len)
{
f[S][y]=f[S][x]+len;
if(!p[y])
{
p[d[++tl]=y]=1;
if(f[S][d[h+1]]>f[S][y]) swap(d[hd+1],d[tl]);
}
}
}
p[x]=0;
}
} int main()
{
freopen("treasure.in","r",stdin);
freopen("treasure.out","w",stdout);
scanf("%d%d%d",&h,&n,&m), n1=n*m;
fo(dep,1,h) fo(i,1,n1) scanf("%d",&a[dep][i]);
fo(dep,1,h)
{
memset(f,63,sizeof f);
scanf("%d",&K);
fo(i,1,K) scanf("%d%d",&x,&y), X[i]=(x-1)*m+y, f[0][X[i]]=f[1<<i-1][X[i]]=a[dep][X[i]];
X[++K]=0, f[0][0]=f[1<<K-1][0]=0;
fo(S,1,(1<<K)-1)
{
for(int s=(S-1)&S; 233; s=(s-1)&S)
{
fo(x,1,n1) MIN(f[S][x],f[s][x]+f[S^s][x]-a[dep][x]);
if(!s) break;
}
hd=tl=0;
fo(i,0,n1) if(f[S][i]<inf) p[d[++tl]=i]=1;
spfa(dep,S);
}
fo(i,1,n1) g[i]=f[(1<<K)-1][i];
}
ans=inf;
fo(i,1,n1) MIN(ans,g[i]);
printf("%d",ans);
}

T3

Description

  • 给定无限平面网格图上的\(N(≤100000)\)个黑格,其余格为白。保证所有黑格四连通,所有白格四连通。
  • 在一个黑格时,一步可以走到与它四连通相邻的黑格。
  • 求所有黑格两两间的最小步数。

Solution

  • 这是IOI2012T4,顾昱洲写的TJ里有一种DP解法,但那种方法有些繁琐;这里讲一种撵爆顾昱洲更为简单的方法。
  • 考虑将黑格按横坐标剖分,即把一块横坐标相同且相邻的黑格压成一个点;如果有两块横坐标不同但相邻的黑格,就在它们对应的新点之间连边。这样一定会形成一棵树,我们可以直接在上面搞事情。
  • 但如果直接遍历这棵重构树求答案,我们并不知道对于之前的黑格,它走下来需要左右移动多少次(即纵坐标更改多少次),强行记录的话又过于繁琐。有一个很妙的思路是:我们可以把横坐标和纵坐标对答案的贡献分开处理。比如处理横坐标对答案的贡献时,就不管它左右移动,每次只上下移动,那就很好做了。
  • 时间复杂度的话,不算排序是\(O(n)\)的。

Code

#include <cstdio>
#include <cstring>
#include <algorithm>
#define fi first
#define se second
#define fo(i,a,b) for(int i=a;i<=b;i++)
using namespace std;
typedef pair<int,int> P; const int N=11e4,v[2]={-1,1};
int n,cnt,L[N],R[N],X[N],tot,a[N],sz[N];
P p[N];
struct edge{int v,t;}e[N<<1];
long long ans; inline bool con(int x,int y) {return X[x]+1==X[y]&&L[x]<=R[y]&&L[y]<=R[x];}
inline void link(int x,int y)
{
e[++tot]=(edge){y,a[x]}, a[x]=tot;
e[++tot]=(edge){x,a[y]}, a[y]=tot;
}
void dfs(int x,int f)
{
sz[x]=R[x]-L[x]+1;
for(int i=a[x],y; y=e[i].v; i=e[i].t) if(y^f) dfs(y,x),sz[x]+=sz[y];
ans+=1ll*sz[x]*(n-sz[x]);
}
void work()
{
sort(p+1,p+n+1);
cnt=0;
fo(i,1,n) if(p[i-1].fi<p[i].fi||p[i-1].se+1<p[i].se) R[cnt]=p[i-1].se, L[++cnt]=p[i].se, X[cnt]=p[i].fi;
R[cnt]=p[n].se;
int j=1;
memset(a,tot=0,sizeof a);
fo(i,1,cnt)
{
if(j>cnt) break;
for(; j<=cnt&&(X[j]<=X[i]||X[j]==X[i]+1&&!con(i+1,j)&&L[j]<=R[i]); j++) if(con(i,j)) link(i,j);
if(con(i,j)) link(i,j);
}
dfs(1,0);
} int main()
{
freopen("city.in","r",stdin);
freopen("city.out","w",stdout);
scanf("%d",&n);
fo(i,1,n) scanf("%d%d",&p[i].fi,&p[i].se); work(); fo(i,1,n) swap(p[i].fi,p[i].se);
work(); printf("%lld",ans%int(1e9));
}

【纪中集训】2019.08.10【NOIP提高组】模拟 A 组TJ的更多相关文章

  1. 【纪中集训2019.3.12】Mas的仙人掌

    题意: ​ 给出一棵\(n\)个点的树,需要加\(m\)条边,每条边脱落的概率为\(p_{i}\) ,求加入的边在最后形成图中仅在一个简单环上的边数的期望: \(1 \le n \ , m \le 1 ...

  2. 【纪中集训2019.3.27】【集训队互测2018】小A的旅行(白)

    题目 描述 ​ \(0-n-1\)的图,满足\(n\)是\(2\)的整数次幂, $ i \to j $ 有 $ A_{i,j} $ 条路径: ​ 一条路径的愉悦值定义为起点和终点编号的\(and\)值 ...

  3. 【纪中集训2019.3.23】Deadline

    题意 描述 一个二分图\((A,B)\),每个点额外有一个颜色0或者1: 匹配时,只能相同颜色的点匹配: 给出\(A\)中的颜色,问如何分配\(B\)种的颜色使得\((A,B)\)的最大匹配最小: 范 ...

  4. 【纪中集训2019.3.23】IOer

    题目 描述 你要在\(m\)天内,刷\(n\)道题,每天可以刷的题的数目不限: 第\(i\)天可以刷的题目的种类是\(ui+v\): 两种刷题的方案不同当且仅当某天刷题的数量不同或者依次刷题的种类不同 ...

  5. 【纪中集训2019.3.11】Cubelia

    题目: 描述 给出长度为\(n\)的数组\(a\)和\(q\)个询问\(l,r\). 求区间\([l,r]\)的所有子区间的前缀和的最大值之和: 范围: $n \le 2 \times 10^5 , ...

  6. 【纪中集训2019.3.12】Z的礼物

    题意 已知\(a_{i} = \sum_{j=1}^{i} \{^{i} _{j} \}b_{j}\), 给出\(a_{1} 到 a_{n}\) : 求\(b_{l} 到 b_{r}\)在\(1e9+ ...

  7. 【纪中集训2019.3.13】fft

    题意: 描述 一共有\(n+m\)道题,其中\(n\)道答案是\(A\),\(m\)道答案是\(B\): 你事先知道\(n和m\),问在最优情况下的期望答错次数,对\(998244353\)取模: 范 ...

  8. 「中山纪中集训省选组D1T1」最大收益 贪心

    题目描述 给出\(N\)件单位时间任务,对于第\(i\)件任务,如果要完成该任务,需要占用\([S_i, T_i]\)间的某个时刻,且完成后会有\(V_i\)的收益.求最大收益. 澄清:一个时刻只能做 ...

  9. 2018.12.08【NOIP提高组】模拟B组总结(未完成)

    2018.12.08[NOIP提高组]模拟B组总结 diyiti 保留道路 进化序列 B diyiti Description 给定n 根直的木棍,要从中选出6 根木棍,满足:能用这6 根木棍拼出一个 ...

  10. 纪中集训 Day 0?

    好吧昨天的等到今天才来写,现在超不想刷题,来写下blog吧= = 坐了近10H的火车终于来到了中山市 火车上在看空之境界,等有时间补下动画吧= = 到了宿舍各种不习惯(现在才发现还是母校好QAQ)然后 ...

随机推荐

  1. python使用HTMLTestRunner.py生成测试报告

    这里我使用的是python selenium webdriver环境,浏览器驱动安装见selenium 1.下载HTMLTestRunner.py:http://tungwaiyip.info/sof ...

  2. node连接mysql数据库

    1. 创建项目,安装mysql 创建项目文件夹test, 在test文件夹下yarn add mysql --save安装mysql: 2. node使用mysql 在test文件夹下,创建test. ...

  3. 【CF1257B】Magic Stick【思维】

    题意:每次可以对a进行两种操作,1:如果是偶数,则变成3*a/2:2:变成a-1 显然当a=1时,b只能为1 a=2或3时,b只能为123 a>3时,b可以为任意数 代码: #include&l ...

  4. html 的一些基础操作

    花了一天学了点html语言..不记下来的话又白学了 基础中的基础格式 <!DOCTYPE html> <html> <head> <!-- 字符集的选择 ut ...

  5. 【Linux】shell脚本参数传递

    这里介绍参数传递的两种方式. 方式一:$0,$1,$2... 采用$0,$1,$2..等方式获取脚本命令行传入的参数 $0:脚本名称 $1....: 参数 例子: #编写一个shell $ vim t ...

  6. window使用

    运行命令 regedit #注册表编译器 firewall.cpl #打开防火墙配置 powershell #打开powershell control #打开控制面版 cnpa.cpl #打开网络设置 ...

  7. [CSP-S模拟测试76]题解

    咕咕咕 A.序列 无解情况:$n>a*b$或$n<a+b-1$ 把序列分成B段,每段内部上升,各段分界处构成下降子序列. 实现并不是太简单,要动态地考虑一下边界什么的. #include& ...

  8. [CSP-S模拟测试]:Lighthouse(哈密顿回路+容斥)

    题目背景 $Billions\ of\ lighthouses...stuck\ at\ the\ far\ end\ of\ the\ sky.$ 题目描述 平面有$n$个灯塔,初始时两两之间可以相 ...

  9. codeforces gym100418J

    题目简述 给定N 求1到N中有多少个幸运数字 幸运数字的定义为 这个数能被它二进制表示下1的个数整除 其中(1 ≤ N ≤ 1019) -------------------------------- ...

  10. linux下不同服务器间数据传输(rcp,scp,rsync,ftp,sftp,lftp,wget,curl)

    因为工作原因,需要经常在不同的服务器见进行文件传输,特别是大文件的传输,因此对linux下不同服务器间数据传输命令和工具进行了研究和总结.主要是rcp,scp,rsync,ftp,sftp,lftp, ...