题面

题解

我们把每个地雷向它能炸到的地雷连边,不难发现同一个强联通分量里的点只要一个炸全炸

那么我们缩点,首先所有入度为\(0\)的强联通分量中必须得选一个地雷炸掉,而入度不为\(0\)的强联通分量绝对会被某个入度为\(0\)的点连锁反应给炸掉,所以不用考虑

于是对于每个入度为\(0\)的点开一个\(set\),维护里面的所有\(c_i\),从每个\(set\)里取出最小的加入答案,修改也没问题了,于是有\(50\)分了

然而现在的问题是边数太多了,题解的做法是用线段树优化连边,于是就可以\(AC\)了

然而咱太菜了,并不会线段树优化连边,于是考虑了一个比较扯淡的办法

我们先把所有点按坐标排序,然后两两之间先把该连的边都连上

对于每个点,向左向右找到它最远能扩展的点,分别连边

一点正确性都没有,然而咱交上去竟然有\(60\)分

于是咱受到了鼓励,改了改,如果当前点和最远能拓展到的点之间的点数不超过\(10\),那当前点直接把所有该连的都连了,否则就从这中间随机选取\(10\)个点连边

交上去竟然\(A\)了

反正是\(IOI\)赛制调参也方便

//minamoto
#include<bits/stdc++.h>
#define R register
#define ll long long
#define fp(i,a,b) for(R int i=a,I=b+1;i<I;++i)
#define fd(i,a,b) for(R int i=a,I=b-1;i>I;--i)
#define go(u) for(int i=head[u],v=e[i].v;i;i=e[i].nx,v=e[i].v)
template<class T>inline bool cmin(T&a,const T&b){return a>b?a=b,1:0;}
inline int abs(R int x){return x<0?-x:x;}
using namespace std;
char buf[1<<21],*p1=buf,*p2=buf;
inline char getc(){return p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?EOF:*p1++;}
int read(){
R int res,f=1;R char ch;
while((ch=getc())>'9'||ch<'0')(ch=='-')&&(f=-1);
for(res=ch-'0';(ch=getc())>='0'&&ch<='9';res=res*10+ch-'0');
return res*f;
}
char sr[1<<21],z[20];int K=-1,Z=0;
inline void Ot(){fwrite(sr,1,K+1,stdout),K=-1;}
void print(R ll x){
if(K>1<<20)Ot();if(x<0)sr[++K]='-',x=-x;
while(z[++Z]=x%10+48,x/=10);
while(sr[++K]=z[Z],--Z);sr[++K]='\n';
}
const int N=1e5+5,M=6e6+5;
struct eg{int v,nx;}e[M];int head[N],tot;
inline void add(R int u,R int v){e[++tot]={v,head[u]},head[u]=tot;}
int dfn[N],low[N],col[N],st[N],p[N],r[N],c[N],deg[N];
int tim,n,q,top,cnt,x,y;multiset<int>s[N];ll ans;
void tarjan(int u){
dfn[u]=low[u]=++tim,st[++top]=u;
go(u)if(!dfn[v]){
tarjan(v),cmin(low[u],low[v]);
}else if(!col[v])cmin(low[u],dfn[v]);
if(dfn[u]==low[u]){
for(++cnt;st[top+1]!=u;--top)col[st[top]]=cnt;
}
}
struct node{
int p,id;
node(){}
node(int p,int id):p(p),id(id){}
friend bool operator <(const node &a,const node &b){return a.p<b.p;}
}a[N];
void add_edge(){
fp(i,1,n)a[i]=node(p[i],i);
sort(a+1,a+1+n);
fp(i,2,n-1){
if(abs(a[i].p-a[i-1].p)<=r[a[i].id])add(a[i].id,a[i-1].id);
if(abs(a[i].p-a[i+1].p)<=r[a[i].id])add(a[i].id,a[i+1].id);
}
if(abs(a[n].p-a[n-1].p)<=r[a[n].id])add(a[n].id,a[n-1].id);
if(abs(a[1].p-a[2].p)<=r[a[1].id])add(a[1].id,a[2].id);
fp(i,1,n){
int j=upper_bound(a+1,a+1+n,node(a[i].p+r[a[i].id],0))-a-1;
if(j!=i){
add(a[i].id,a[j].id);
if(j!=i+1){
if(j-i+1<=10){
fp(k,i+1,j-1)add(a[i].id,a[k].id);
}else{
int T=10;
while(T--){
int id=rand()%(j-i-1)+1+i;
add(a[i].id,a[id].id);
}
}
}
}
}
fp(i,1,n)a[i]=node(-p[i],i);
sort(a+1,a+1+n);
fp(i,1,n){
int j=upper_bound(a+1,a+1+n,node(a[i].p+r[a[i].id],0))-a-1;
if(j!=i){
add(a[i].id,a[j].id);
if(j!=i+1){
if(j-i+1<=10){
fp(k,i+1,j-1)add(a[i].id,a[k].id);
}else{
int T=10;
while(T--){
int id=rand()%(j-i-1)+1+i;
add(a[i].id,a[id].id);
}
}
}
}
}
}
int main(){
srand(time(0));
// freopen("testdata.in","r",stdin);
freopen("mines.in","r",stdin);
freopen("mines.out","w",stdout);
n=read(),q=read();
fp(i,1,n)p[i]=read(),r[i]=read(),c[i]=read();
// fp(i,1,n)fp(j,1,n)if(i!=j&&abs(p[i]-p[j])<=r[i])add(i,j);
add_edge();
fp(i,1,n)if(!dfn[i])tarjan(i);
fp(u,1,n)go(u)if(col[u]!=col[v])++deg[col[v]];
fp(i,1,n)if(!deg[col[i]])s[col[i]].insert(c[i]);
fp(i,1,cnt)ans+=*s[i].begin();
while(q--){
x=read(),y=read();
if(!deg[col[x]]){
ans-=*s[col[x]].begin();
s[col[x]].erase(s[col[x]].lower_bound(c[x]));
c[x]=y;
s[col[x]].insert(c[x]);
ans+=*s[col[x]].begin();
}
print(ans);
}
return Ot(),0;
}

jzoj6001. 【PKUWC2019模拟2019.1.15】Mines (tarjan)的更多相关文章

  1. jzoj6002. 【PKUWC2019模拟2019.1.15】Permutation (组合数)

    题面 题解 设\(lim=(n-1)/2\)(这里是下取整),那么\(x\)位置的值最大不能超过\(lim\),而\(y\)处的值不能小于\(y\),于是有\[Ans=\sum_{i=1}^{lim} ...

  2. jzoj6005. 【PKUWC2019模拟2019.1.17】数学 (生成函数+FFT+抽代+高精)

    题面 题解 幸好咱不是在晚上做的否则咱就不用睡觉了--都什么年代了居然还会出高精的题-- 先考虑如果暴力怎么做,令\(G(x)\)为\(F(n,k)\)的生成函数,那么不难发现\[G^R(x)=\pr ...

  3. jzoj6004. 【PKUWC2019模拟2019.1.17】集合 (组合数学)

    题面 题解 这种题目就是要好好推倒 我们枚举最小的数是哪一个,那么答案就是\[Ans=\sum_{i=1}^nT^i{n-i\choose k-1}\] 因为有\[\sum_{i=p}^n{n-i\c ...

  4. 6359. 【NOIP2019模拟2019.9.15】小ω的树(tree)(定期重构)

    题目描述 题解 qy的毒瘤题 CSP搞这种码农题当场手撕出题人 先按照边权从大到小建重构树,然后40%暴力修改+查找即可 100%可以定期重构+平衡规划,每次把B个询问拉出来建虚树,在虚树上暴力维护每 ...

  5. [JZOJ6359] 【NOIP2019模拟2019.9.15】小ω的树

    题目 题目大意 给你一棵树,带点权和边权. 要你选择一个联通子图,使得点权和乘最小边权最大. 支持修改点权操作. 思考历程 显然,最先想到的当然是重构树了-- 重构树就是在做最大生成树的时候,当两个联 ...

  6. 6358. 【NOIP2019模拟2019.9.15】小ω的仙人掌

    题目 题目大意 给你一串二元组\((a_i,b_i)\)的数列. 求最小的区间\([l,r]\)长度,满足\([l,r]\)中的每个二元组选或不选,使得\(\sum a_i=w\)且\(\sum b_ ...

  7. JZOJ 5818. 【NOIP提高A组模拟2018.8.15】 做运动

    5818. [NOIP提高A组模拟2018.8.15] 做运动 (File IO): input:running.in output:running.out Time Limits: 2000 ms  ...

  8. Data truncation: Incorrect datetime value: 'May 15, 2019 4:15:37 PM

    因为系统在windows下测试过是正常的 windows下的jdk+ windows下安装的mysql 全部cases通过 linux下的jdk + windows下安装的mysql 新增和更新,影响 ...

  9. MyBatis 配置/注解 SQL CRUD 经典解决方案(2019.08.15持续更新)

    本文旨在记录使用各位大神的经典解决方案. 2019.08.14 更新 Mybatis saveOrUpdate SelectKey非主键的使用 MyBatis实现SaveOrUpdate mybati ...

随机推荐

  1. Java for LeetCode 128 Longest Consecutive Sequence

    Given an unsorted array of integers, find the length of the longest consecutive elements sequence. F ...

  2. ceph分布式存储系统初探

    前言 由于公司的业务调整,现在我又要接触ceph这个东西,由于我接手的是一个网盘类项目,所以分布式存储系统ceph就是我必须要学的了.现在压力还是比较大的,从业务直接到后台核心. 大概在这几天,我将c ...

  3. 关于connect: network is unreachable 问题的解决【转】

    本文转载自:https://blog.csdn.net/liukun321/article/details/6662950 由于发现原创文章,在未署名作者及出处的情况下被转载.在以后所有的原创文章开头 ...

  4. javascript正则(带g符号) 多次调用test 结果交替出现

    链接:https://segmentfault.com/q/1010000000582051 http://stackoverflow.com/questions/2851308/why-does-m ...

  5. 图解HTTP接口自动化测试框架使用

    Robot Framework是一款python语言编写,通用的功能自动化测试框架.它使用了比较易用的表格数据语法,基于关键字驱动测试,主要用来验收测试和验收测试驱动开发(ATDD). 运行RIDE, ...

  6. python之tkinter_2

    关于tkinter的组件介绍,这篇博客很详细: https://www.cnblogs.com/aland-1415/p/6849193.html tkinter is to make interfa ...

  7. 高并发压力下导致数据库bug

    环境信息:  linux 6.1 + oracle11.2.0.3 RAC     问题现象: 学校晚上6点选课,人数大概有3000,7点时,数据库报错如下(数据库到6点多还是可以连接的),数据库hu ...

  8. 【LeetCode】051. N-Queens

    题目: The n-queens puzzle is the problem of placing n queens on an n×n chessboard such that no two que ...

  9. [转]从onload和DOMContentLoaded谈起

    这篇文章是对这一两年内几篇dom ready文章的汇总(文章的最后会标注参考文章),因为浏览器进化的关系,可能他们现在的行为与本文所谈到的一些行为不相符.我也并没有一一去验证,所以本文仅供参考,在具体 ...

  10. CF1076E:Vasya and a Tree

    浅谈树状数组与线段树:https://www.cnblogs.com/AKMer/p/9946944.html 题目传送门:https://codeforces.com/problemset/prob ...