题面:https://www.cnblogs.com/Juve/articles/11569010.html

Tourist Attractions:

暴力当然是dfs四层

优化一下,固定两个点,答案就是这两个点的度数减一相乘,在枚举第三点,减去三元环的情况

三元环可以用bitset优化

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#include<bitset>
#define re register
#define int long long
using namespace std;
const int MAXN=1505;
int n,ans=0,du[MAXN];
bool mp[MAXN][MAXN];
char ch[MAXN];
bitset<MAXN>b[MAXN],t;
signed main(){
scanf("%lld",&n);
for(re int i=1;i<=n;++i){
b[i].reset();
scanf("%s",ch+1);
for(re int j=1;j<=n;++j){
if(ch[j]=='1'){
b[i].set(j,1);
mp[i][j]=1;
++du[i];
}
}
}
t.reset();
for(int x=1;x<=n;++x){
for(int y=1;y<=n;++y){
if(y==x) continue;
if(mp[x][y]!=1) continue;
ans+=(du[x]-1)*(du[y]-1);
t=b[x]&b[y];
ans-=t.count();
}
}
printf("%lld\n",ans);
return 0;
}

养花:

考场上只有暴力了。。。

考虑到k只有1e5,我们考虑预处理出每一个k时的情况

我们考虑分块,预处理出每一个块内%k的最大值,查询时大段直接统计块内的,小段暴力

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
const int block=1e3;
const int MAXN=1e5+5;
const int N=1e5+2;
const int MAXM=1e2+5;
int n,m,a[MAXN],f[MAXN],blo[MAXN],num,mx[MAXM][MAXN];
signed main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i) scanf("%d",&a[i]),blo[i]=(i-1)/block;
num=(n-1)/block;
for(int i=0;i<=num;++i){
memset(f,0,sizeof(f));
int l=i*block+1,r=min(n,(i+1)*block);
for(int j=l;j<=r;++j) f[a[j]]=a[j];
for(int j=1;j<=N;++j) f[j]=max(f[j],f[j-1]);
for(int j=1;j<=N;++j){
for(int k=0;k<=N;k+=j){
mx[i][j]=max(mx[i][j],f[min(k+j-1,N)]-k);
}
}
}
while(m--){
int l,r,k,ans=0;
scanf("%d%d%d",&l,&r,&k);
for(int i=blo[l]+1;i<blo[r];++i) ans=max(ans,mx[i][k]);
for(int i=l;i<=min(r,(blo[l]+1)*block);++i) ans=max(ans,a[i]%k);
for(int i=max(l,blo[r]*block+1);i<=r;++i) ans=max(ans,a[i]%k);
printf("%d\n",ans);
}
return 0;
}

画作:

有一个性质:在画的时候每次修改的点都是上一次修改的点的子集

不难证明猜到一个这样的结论: 存在一种最优方案使得每次操作的区
域是上一次的子集且颜色与上一次相反.
考虑归纳证明, 记 S 为当前所有操作区域的并, T 为接下来一步的操作
区域, 我们有:
1. T 与 S 有交的情况一定可以转化成 T 被 S 包含的情况.
2. T 与 S 交集为空时, 可以找一个连接 S 和 T 的集合 M 并操作 S ∪
T ∪ M , 并将之前的所有操作连接到更外的层以及外层的连接部分同时
操作, 特殊处理最外层和第二层的情况.
3. T 被 S 包含时, T 落在某个完整区域内时等价于情况二, 否则一定连
接若干个同色块, 这些块可以同时处理, 步数一定不会更劣.
知道这个结论就比较好做了, 我们可以枚举最后被修改的区域, 这时答
案就是将同色边边权当作 0, 异色边边权当作 1 后距离这个点最远的黑色点
的距离, 对所有点取最小值即可.

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
using namespace std;
int n,m,mp[55][55],ans=0x7fffffff;
char ch[55];
int dx[4]={1,-1,0,0};
int dy[4]={0,0,1,-1};
int calc(int i,int j){return (i-1)*m+j;}
bool vis[55*55];
int dis[55*55];
priority_queue< pair< pair<int,int>,pair<int,int> > >pq;
inline int dij(int st,int pp,int qq){
memset(dis,0x3f,sizeof(dis));
dis[st]=0;
memset(vis,0,sizeof(vis));
pq.push(make_pair(make_pair(-dis[st],st),make_pair(pp,qq)));
while(!pq.empty()){
pair< pair<int,int>,pair<int,int> > pa=pq.top();
pq.pop();
if(vis[pa.first.second]) continue;
vis[pa.first.second]=1;
int x=pa.second.first,y=pa.second.second;
for(int i=0;i<4;++i){
int p=x+dx[i],q=y+dy[i];
if(p<1||p>n||q<1||q>m) continue;
int w=!(mp[x][y]==mp[p][q]);
int v=calc(p,q);
if(dis[v]>dis[pa.first.second]+w){
dis[v]=dis[pa.first.second]+w;
pq.push(make_pair(make_pair(-dis[v],v),make_pair(p,q)));
}
}
}
int res=0;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
if(mp[i][j]==1) res=max(res,dis[calc(i,j)]);
}
}
return res;
}
signed main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;++i){
scanf("%s",ch+1);
for(int j=1;j<=m;++j){
mp[i][j]=ch[j]-'0';
}
}
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
ans=min(ans,dij(calc(i,j),i,j));
}
}
printf("%d\n",ans+1);
return 0;
}

csp-s模拟48,49 Tourist Attractions,养花,画作题解的更多相关文章

  1. csp-s模拟测试49(9.22)养花(分块/主席树)·折射(神仙DP)·画作

    最近有点头晕........... T1 养花 考场我没想到正解,后来打的主席树,对于每个摸数查找1-(k-1),k-(2k-1)...的最大值,事实上还是很容易被卡的但是没有数据好像还比较友善, 对 ...

  2. LYDSY模拟赛day1 Tourist Attractions

    /* 假设路径是 a − b − c − d,考虑枚举中间这条边 b − c,计 算有多少可行的 a 和 d. 设 degx 表示点 x 的度数,那么边 b − c 对答案的贡献为 (degb − 1 ...

  3. CSPS模拟 48

    ??? 分数越来越低??? T1 String Master 题目过于毒瘤,以至于我都不想改 T2 Tourist Attractions 稍微转化题意是求无向图的三角形个数 由于坚信bitset不是 ...

  4. 旅游景点 Tourist Attractions 题解

    题面在这里 再次破了纪录,连做了3天... 让我们从头来一点一点分析 1.预处理 先看题面,乍一看貌似是个图论题,有n个点m条边,给定一些必须经过的点和强制经过顺序,求一条最短路 我们发现n和m都比较 ...

  5. [CSP-S模拟测试]:Tourist Attractions(简单图论+bitset)

    题目描述 在美丽的比特镇一共有$n$个景区,编号依次为$1$到$n$,它们之间通过若干条双向道路连接.$Byteasar$慕名来到了比特镇旅游,不过由于昂贵的门票费,他只能负担起$4$个景区的门票费. ...

  6. [考试反思]0921csp-s模拟测试49:困顿

    太弱.还是太弱. 拉不开分差,离第一机房分数线估计还是300多分. 但是,还是要骂:XX出题人. 部分分非常少且没有意义,T1基本只有0/纯暴力20/100三个档, T2正解是n2但是n3一分不给,还 ...

  7. 2019.9.21 csp-s模拟测试49 反思总结

    没赶上昨天的考试,不过我这种人考不考都没有多少提升吧. 挺服气的一场考试,有生以来参加的最让人想笑的考试. T1:养花 取模,区间询问最大值,有点套路化的预处理答案…难点也在预处理上.容易想到分块然后 ...

  8. 解题:POI 2007 Tourist Attractions

    题面 事实上这份代码在洛谷过不去,因为好像要用到一些压缩空间的技巧,我并不想(hui)写(捂脸) 先预处理$1$到$k+1$这些点之间相互的最短路和它们到终点的最短路,并记录下每个点能够转移到时的状态 ...

  9. [POI2007]Tourist Attractions

    题目大意: 给你一个$n(n\leq 2\times 10^4)$个点,$m(m\leq 2\times 10^5)$条边的带边权的连通图.其中有$k(k\leq 20)$个关键点.关键点之间有$g$ ...

随机推荐

  1. PyQt6的在线安装与环境配置

    https://www.jianshu.com/p/185e277e0058 一,安装好Python,Pycharm 二,安装或更新pip C:\> python -m pip install ...

  2. ON_EVENT 报错

    错误提示: error C2440: 'initializing' : cannot convert from 'const wchar_t [1]' to 'UINT' error C2440: ' ...

  3. socket2里面,有些函数带WSA开头,有些不带。请问有何区别?

    WSASocket可以使用WinSock特有功能,比如重叠IO,用dwflags指定.    WSA的A是指api,用于区别spi,因为在spi中还有wspsocket,wspaccept等... 在 ...

  4. System.Web.Mvc.ActionResult.cs

    ylbtech-System.Web.Mvc.ActionResult.cs 1.程序集 System.Web.Mvc, Version=5.2.3.0, Culture=neutral, Publi ...

  5. iOS开发NSLayoutConstraint代码自动布局

    1.NSLayoutConstraint简介 适配界面大多用Masonry工具,也是基于NSLayoutConstraint写的!通过使用两个类方法实现自动布局: + (NSArray<__ki ...

  6. 解决ubuntu16.04鼠标键盘自动休眠导致的失灵问题

    sudo vi /etc/laptop-mode/conf.d/runtime-pm.conf 把 AUTOSUSPEND_RUNTIME_DEVTYPE_BLACKLIST="" ...

  7. day 65 Django基础十一之认证系统

    Django基础十一之认证系统   本节目录 一 auth模块 二 User对象 三 扩展默认的auth_user表 四 xxx 五 xxx 六 xxx 七 xxx 八 xxx 一 auth模块 我们 ...

  8. 使用JDK自带功能,实现一个简单的Web Service接口发布

    万事开头难,本篇文章的目的就是使用JDK自带的功能,实现一个最简单的Web Service接口的发布. 下图是项目的组成,主要有三个部分,一个接口(WS),一个接口的实现类(WSImp),还有一个接口 ...

  9. 打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口。 语法: window.open([URL], [窗口名称], [参数字符串])

    打开新窗口(window.open) open() 方法可以查找一个已经存在或者新建的浏览器窗口. 语法: window.open([URL], [窗口名称], [参数字符串]) 参数说明: URL: ...

  10. crontab中反引号和$()无效的解决

    问题描述 1.增加了一条crontab,删除本月中2天以前的日志 10 02  * * * /bin/find /data/logs/php/$(date  +%Y%m)/ -mtime +2 | x ...