csp-s模拟测试42「世界线·时间机器·密码」
$t3$不会
世界线
题解
题目让求的就是每个点能到点的数量$-$出度
设每个点能到的点为$f[x]$
则$f[x]=x \sum\limits_{y}^{y\in son[x]} U f[y]$
用$bitset$优化一下即可,但单纯这样会炸内存,随意$yy$一下,时间换空间,像平衡树一样开个垃圾桶都行
代码
#include<bits/stdc++.h>
using namespace std;
#define ll int
#define A 60001
ll dl[A],ans[A],head[A*5],nxt[A*5],ver[A*5],out[A],in[A];
ll n,m,tot,sbzzn=0;
bitset<5005> bit[A];
void add(ll x,ll y){
nxt[++tot]=head[x],head[x]=tot,ver[tot]=y;
}
void top(){
deque<ll> q;
for(ll i=1;i<=n;i++)
if(in[i]==0) q.push_back(i);
while(!q.empty()){
ll top_now=q.front();
// printf("dl[0]=%d top_now=%d\n",dl[0],top_now);
dl[++dl[0]]=top_now;
q.pop_front();
for(ll i=head[top_now];i;i=nxt[i]){
ll y=ver[i];
// printf("top_now=%d y=%d in[y]=%d\n",top_now,y,in[y]);
in[y]--;
if(in[y]==0) q.push_back(y);
}
}
}
void count(){
for(ll l=1,r=5000;l<=n;l=r+1,r+=5000){
for(ll i=1;i<=n;i++)
bit[i].reset();
for(ll i=dl[0];i>=1;i--){
ll x=dl[i];
for(ll j=head[x];j;j=nxt[j]){
ll y=ver[j];
bit[x]|=bit[y];
}
ans[x]+=bit[x].count();
if(x>=l&&x<=r) bit[x][x-l]=1;
}
}
for(ll i=1;i<=n;i++){
sbzzn+=ans[i]-out[i];
}
printf("%d\n",sbzzn); }
int main(){
//freopen("worldline2.in","r",stdin);
//freopen("haha2.in","w",stdout);
scanf("%d%d",&n,&m);
for(ll i=1,a,b;i<=m;i++){
scanf("%d%d",&a,&b);
in[b]++;
out[a]++;
add(a,b);
}
top();
count();
}
时间机器
题解
贪心,简单线段覆盖贪心,按照左端点排序,从左端点找到右端点最靠左且能覆盖的解
验证正确性
每次枚举到左端点之前所有比当前左端点还靠左的端点都已经考虑完,若当前取不是最符合的一定不会使结果变优,若当前点放不了一定无解
代码
#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define A 501010
ll T;
ll n,m;
struct node{
ll l,r,cnt,op;
friend bool operator < (const node &a,const node &b){
return (a.l==b.l)?a.op<b.op:a.l<b.l;
}
}t[A];
map<ll,ll> mp;
map<ll,ll> :: iterator it;
ll read(){
ll f=1,x=0;char c=getchar();
while(!isdigit(c)) {
if(c=='-') f=-1;
c=getchar();
}
while(isdigit(c)){
x=x*10+c-'0';
c=getchar();
}
return f*x;
}
int main(){
T=read();
while(T--){
n=read();m=read();
mp.clear();
ll cnt=0;//先节点,再电阻
for(ll i=1;i<=n;i++)
t[++cnt].l=read(),t[cnt].r=read(),t[cnt].cnt=read(),t[cnt].op=1;
for(ll i=1;i<=m;i++)
t[++cnt].l=read(),t[cnt].r=read(),t[cnt].cnt=read(),t[cnt].op=-1;
ll ok=1;//printf("oo\n");
sort(t+1,t+1+cnt);
//存节点,拿节点匹配电阻
for(ll i=1;i<=cnt;i++){
//printf("t.op=%lld\n",t[i].op);
if(t[i].op==-1)
mp[t[i].r]+=t[i].cnt;
else{
while(t[i].cnt){
it=mp.lower_bound(t[i].r);
// printf("mp[%lld]=%lld\n",t[i].r,mp[t[i].r]);
if(it==mp.end()){
ok=0;
break;
}
if(t[i].cnt>=it->second) t[i].cnt-=it->second,mp.erase(it);
else it->second-=t[i].cnt,t[i].cnt=0;
// printf("mp[%lld]=%lld\n",t[i].r,mp[t[i].r]);
}
if(!ok)break;
}
}
if(ok==0) printf("No\n");
else printf("Yes\n");
}
}
csp-s模拟测试42「世界线·时间机器·密码」的更多相关文章
- NOIP模拟测试19「count·dinner·chess」
反思: 我考得最炸的一次 怎么说呢?简单的两个题0分,稍难(我还不敢说难,肯定又有人喷我)42分 前10分钟看T1,不会,觉得不可做,完全不可做,把它跳了 最后10分钟看T1,发现一个有点用的性质,仍 ...
- csp-s模拟测试44「D·E·F」
用心出题,用脚造数据 乱搞场 1 #include<bits/stdc++.h> 2 #define re register 3 #define int long long 4 #defi ...
- NOIP模拟测试30「return·one·magic」
magic 题解 首先原式指数肯定会爆$long$ $long$ 首先根据欧拉定理我们可以将原式换成$N^{\sum\limits_{i=1}^{i<=N} [gcd(i,N)==1] C_{G ...
- csp-c模拟测试43「A·B·C」
B 题解 $f[i][(gcd(prime[j]*prime[k]\%P,P))]=\sum\limits_{k=1}^{k<=num} f[i-1][k]*phi(\frac{P}{prime ...
- NOIP模拟测试38「金·斯诺·赤」
金 辗转相减见祖宗 高精 #include<bits/stdc++.h> using namespace std; #define A 2000 #define P 1 #define N ...
- NOIP模拟测试28「阴阳·虎·山洞」
写这几个题解我觉得我就像在按照官方题解抄一样 阴阳 题解 将题目中给的阴阳看作黑色和白色 首先我们观察到最后生成图中某种颜色必须是竖着单调递增或竖着单调递减 类似这样 否则不满足这个条件 但合法染色方 ...
- NOIP模拟测试20「周·任·飞」
liu_runda出的题再次$\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%$ 任 题解 题目中为什么反复强调简单路径,没有环 没有环的图中点数-边数=联通块数 前缀和维护边 ...
- NOIP模拟测试23「mine·water·gcd」
mine 题解 一道比较水的dp 考试因为初始化挂掉了只有$80$分 代码有注释 #include<bits/stdc++.h> using namespace std; //无脑dp # ...
- NOIP模拟测试16「Drink·blue·weed」
话说这次考试 Drink 非常棒的一道卡常练习题,适合练习卡常 真的很棒 前置卡常知识 1.char要比int快 char是最快的 输出putchar,输入getchar 在这个题快了7000豪 2. ...
随机推荐
- Spring Boot & Cloud 轻量替代框架 Solon 1.3.33 发布
Solon 是一个微型的Java开发框架.强调,克制 + 简洁 + 开放的原则:力求,更小.更快.更自由的体验.支持:RPC.REST API.MVC.Micro service.WebSocket. ...
- Java中浮点数的坑
基本数据类型 浮点数存在误差 浮点数有一个需要特别注意的点就是浮点数是有误差的,比如以下这段代码你觉得输出的什么结果: public class Demo { public static void m ...
- 2020.12.14vj补题
A. Lucky Ticket 题意:就是说4与7是幸运数字,用4和7组成的数字也是幸运数字,问所给数字是不是幸运数字 思路:直接敲 代码: 1 #include<iostream> 2 ...
- 射线与空间内三角形的相交检测算法(Möller-Trumbore)的推导与实践
背景介绍(学习算法之前需要先了解) 射线与空间内三角形的相交检测是游戏程序设计中一个常见的问题,最典型的应用就是拾取(Picking),本文介绍一个最常见的方法,这个方法也是DirectX中采用的方法 ...
- 【开源技术分享】无需流媒体服务,让浏览器直接播放rtsp/rtmp的神器:EasyMedia
不同于市面上其他需要各种转发到流媒体服务的中间件来说,EasyMedia不需要依赖任何nginx-rtmp,srs,zlmediakit等等第三方流媒体服务,只需要你有rtsp或者rtmp等等协议的视 ...
- wrk 及扩展支持 tcp 字节流协议压测
wrk 及扩展支持 tcp 字节流协议压测 高性能.方便使用的 HTTP(s) 的流量压测工具,结合了多个开源项目开发而成: redis 的 ae 事件框架 luajit openssl http-p ...
- table不能使用jQuery的slideDown的解决方法
table不能使用jQuery的slideDown的解决方法 一个后台管理项目中遇到了如下场景 要求父级栏目可以收纳子栏目,即折叠功能,而且要有过渡动画,不能太生硬. 它是用table来实现的,但是遇 ...
- [刷题] 1022 D进制的A+B (20分)
思路 设t = A + B,将每一次t % d的结果保存在int类型的数组s中 然后将t / d,直到 t 等于 0为止 此时s中保存的就是 t 在 D 进制下每一位的结果的倒序 最后倒序输出s数组 ...
- C++课程设计 通讯录管理系统 原码及解析
设计题目:通信录管理系统 用C++设计出模拟手机通信录管理系统,实现对手机中的通信录进行管理. (一)功能要求 查看功能:选择此功能时,列出下列三类选择. A 办公类B 个人类C 商务类,当选中某类时 ...
- Centos7 搭建vsftpd
1.安装vsftpd 在线安装:yum -y install vsftpd 离线安装:下载vsftp的rpm包,通过rpm -ivh xxx.rpm安装 2.修改/etc/vsftpd/vsftpd. ...