省选前的CF题
RT,即将退役的人懒得一篇篇写题解,于是有了这个东西
CF1004E
树上选一条不超过k个点的链,最小化其余点到链上点的最大距离
这个思路很有意思,不像平时一般的树上问题,是从叶子开始一点点贪心合并直到合得只剩一条链,这条链就是最后的答案
用优先队列完成,复杂度$O(n\log n)$
#include<set>
#include<queue>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=;
struct a{int pts,len;};
bool operator < (a x,a y)
{
return x.len>y.len;
}
set<pair<int,int> > st[N];
priority_queue<a> hp;
int n,k,t1,t2,t3,siz,ans;
int main()
{
scanf("%d%d",&n,&k),siz=n;
for(int i=;i<n;i++)
{
scanf("%d%d%d",&t1,&t2,&t3);
st[t1].insert(make_pair(t2,t3));
st[t2].insert(make_pair(t1,t3));
}
for(int i=;i<=n;i++)
if(st[i].size()==)
hp.push((a){i,(*st[i].begin()).second});
while(hp.size()>||k<siz)
{
a mn=hp.top(); hp.pop(),siz--,ans=mn.len;
int p=mn.pts,nxt=(*st[p].begin()).first;
st[nxt].erase(st[nxt].lower_bound(make_pair(p,)));
if(st[nxt].size()==)
hp.push((a){nxt,ans+(*st[nxt].begin()).second});
}
printf("%d",ans);
return ;
}
CF772D
题面看题吧
感觉这题没啥意义,因为考场不太可能想出来
这个东西可以理解为十进制下的“与”(=。=???),记录每个权值出现的次数,出现的和,出现的平方和,搞一个十进制FWT来做
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int N=1e6+,M=1e6,mod=1e9+;
int n,rd,a[N],b[N],c[N],f[N],pw2[N]; long long ans;
void Add(int &x,int y)
{
x+=y;
if(x>=mod) x-=mod;
}
void Trans(int *arr,int typ)
{
if(~typ)
{
for(int i=;i<M;i*=)
for(int j=M-;~j;j--)
if(j/i%) Add(arr[j-i],arr[j]);
}
else
{
for(int i=;i<M;i*=)
for(int j=;j<M;j++)
if(j/i%) Add(arr[j-i],mod-arr[j]);
}
}
int main()
{
scanf("%d",&n),pw2[]=;
for(int i=;i<=n;i++) pw2[i]=2ll*pw2[i-]%mod;
for(int i=;i<=n;i++)
{
scanf("%d",&rd);
a[rd]++,Add(b[rd],rd),Add(c[rd],1ll*rd*rd%mod);
}
Trans(a,),Trans(b,),Trans(c,);
for(int i=;i<M;i++)
if(a[i]) f[i]=(a[i]==)?c[i]:1ll*pw2[a[i]-]*(1ll*b[i]*b[i]%mod+c[i])%mod;
Trans(f,-);
for(int i=;i<M;i++) ans^=1ll*i*f[i];
printf("%lld",ans);
return ;
}
CF908D
据yjc说是NOIP前留的题,然而我并不会,wsl
设$dp[i][j]$表示前缀中有i个a和j个ab的期望,在i+j>=k时到达边界,用高中数学讲的 等差数列*等比数列 算一算
答案是dp[1][0],因为dp[0][0]在没有a的时候会自己转移自己
代码咕咕了
CF908H
调了一下午,不知道为啥过不去,重构了一遍好了。。。。。。
先把AND的连起来,然后一个联通块里XOR判无解,剩下的XOR连边之后相当于选不相交独立集并起来,DP+容斥到有方案就输出
注意不用管siz=1的
#include<cstdio>
#include<vector>
#include<cstring>
#include<algorithm>
#define vint vector<int>
#define vit vector<int> ::iterator
using namespace std;
const int N=,M=(<<)+,mod=;
int n,m,aset[N],siz[N],idx[N],sta[N],bit[M],pw[M],dp[M]; char str[N][N];
int Finda(int x)
{
return x==aset[x]?x:aset[x]=Finda(aset[x]);
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%s",str[i]+),aset[i]=i,siz[i]=;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
if(str[i][j]=='A')
{
int fx=Finda(i),fy=Finda(j);
if(fx!=fy) aset[fy]=fx,siz[fx]+=siz[fy];
}
memset(idx,-,sizeof idx);
for(int i=;i<=n;i++)
if(Finda(i)==i&&siz[i]>) idx[i]=m++;
for(int i=;i<m;i++) sta[i]|=<<i;
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++)
if(str[i][j]=='X')
{
int fx=Finda(i),fy=Finda(j);
if(fx==fy) printf("-1"),exit();
if(~idx[fx]&&~idx[fy])
{
sta[idx[fx]]|=<<idx[fy];
sta[idx[fy]]|=<<idx[fx];
}
}
dp[]=; int all=(<<m)-;
for(int i=;i<=all;i++)
{
int lbt=i&-i;
bit[i]=bit[i>>]+(i&);
dp[i]=(dp[i^lbt]+dp[i^(sta[(int)log2(lbt)]&i)])%mod;
}
for(int i=;i<=all;i++) pw[i]=;
for(int i=;i<=n;i++)
{
int tmp=;
for(int j=all;~j;j--)
{
if((m-bit[j])&) (tmp+=mod-pw[j])%=mod;
else (tmp+=pw[j])%=mod;
pw[j]=1ll*pw[j]*dp[j]%mod;
}
if(tmp) printf("%d",n-+i),exit();
}
return ;
}
CF1140
肥肠爆芡,因为沙茶博主看不懂E和之后的题解,这场比赛咕了
省选前的CF题的更多相关文章
- 省选前的th题
沙茶博主终于整完了知识点并学完了早该在NOIP之前学的知识们 于是终于开始见题了,之前那个奇怪的题单的结果就是这个了 题目按沙茶博主的做题顺序排序 个人感觉(暂时)意义不大的已被自动忽略 洛谷 491 ...
- 省选前的JOI
RT,发现找不到题,于是又开了新坑 JOI特色:重思考,代码难度(相比NOI系列)基本没有 (省选前到处挖坑2333) JOI 2017 Final 焚风现象 差分,莫得了 (不是看到200ms就tm ...
- [TaskList] 省选前板子补完计划
省选前本子补完计划 [ ] 带权并查集 [ ] 树上莫队 - UOJ58 [WC2013]糖果公园 loj2485「CEOI2017」Chase
- [OI]省选前模板整理
省选前把板子整理一遍,如果发现有脑抽写错的情况,欢迎各位神犇打脸 :) 数学知识 数论: //组合数 //C(n,m) 在n个数中选m个的方案数 ll C[N][N]; void get_C(int ...
- csp退役前的做题计划1(真)
csp退役前的做题计划1(真) 因为我太菜了,所以在第一次月考就会退役,还是记录一下每天做了什么题目吧. 任务计划 [ ] Z算法(Z Algorithm) 9.28 [x] ARC061C たくさん ...
- 解决el-tree lazy懒加载时,连续勾选前两个子节点后第二次进入默认选中时,将父节点也勾选的问题
在用到el-tree的懒加载和默认勾选功能时,若第一次勾选前几个连续节点,第二次进入默认勾选时,由于el-tree子节点尚未完全加载(只加载出来前几个),默认勾选已经开始(已加载出来的子节点被默认勾选 ...
- yyb省选前的一些计划
突然意识到有一些题目的计划,才可以减少大量查水表或者找题目的时间. 所以我决定这样子处理. 按照这个链接慢慢做. 当然不可能只做省选题了. 需要适时候夹杂一些其他的题目. 比如\(agc/arc/cf ...
- NOIP前的刷题记录
因为这几天要加油,懒得每篇都来写题解了,就这里记录一下加上一句话题解好了 P4071 [SDOI2016]排列计数 组合数+错排 loj 6217 扑克牌 暴力背包 P2511 [HAOI2008 ...
- 【POJ各种模板汇总】(写在逆风省选前)(不断更新中)
1.POJ1258 水水的prim……不过poj上硬是没过,wikioi上的原题却过了 #include<cstring> #include<algorithm> #inclu ...
随机推荐
- 网络编程学习笔记:Socket编程
文的主要内容如下: 1.网络中进程之间如何通信? 2.Socket是什么? 3.socket的基本操作 3.1.socket()函数 3.2.bind()函数 3.3.listen().connect ...
- ecna2017-Game of Throwns
这题就是给你一个标号为0-n-1的环,然后给你M个操作,操作有两种,一种是直接给一个数,这数的正负代表我当前向前(向后)仍了xx个位置的球,或者给你一个撤销操作表示为 undo m,表示撤销最近的M个 ...
- 【2016.3.22】作业 Word count 小程序
今天更下word count程序的设计思路及实现方法. 我的程序贴在coding里,这里就先不贴出来了, 我的coding地址:https://coding.net/u/holy_angel/p/wo ...
- 《移山之道》Reading Task——by12061154Joy
最近因为作业的原因所以接触到了这本书,给我最特别的感觉就是很新鲜,主要是因为这本书是以故事展开的,大概是我读的书太少,基本没有看到过专业书的知识体系是用故事串讲起来的,这样帮助读者理解了一些概念并且不 ...
- 【个人阅读作业】软件工程M1/M2总结
链接:”看<快速软件开发>的五个问题“ http://www.cnblogs.com/leiyy/p/4027759.html 一.较为明白的问题 1. 在文章的第一个关于Square_T ...
- Linux内核读书笔记第三周 调试
内核调试的难点在于它不能像用户态程序调试那样打断点,随时暂停查看各个变量的状态. 也不能像用户态程序那样崩溃后迅速的重启,恢复初始状态. 用户态程序和内核交互,用户态程序的各种状态,错误等可以由内核来 ...
- ### The error may involve defaultParameterMap ### The error occurred while setting parameters
Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Query was empty; bad SQL grammar [ ...
- Angular injector注入器
<!DOCTYPE html><html ng-app="myApp"><head lang="en"> <meta ...
- PHP常用工具类积累
第一 请求第三方接口的工具类 例如,封装了get和post请求方法的工具类,代码如下: <?php class HttpClient{ /** * HttpClient * @param arr ...
- Delphi的关键字
Constructor;构造器,定义构造函数使用Constructor关键字