题面

题解

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

那么我们缩点,首先所有入度为\(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 108 Convert Sorted Array to Binary Search Tree

    Given an array where elements are sorted in ascending order, convert it to a height balanced BST. 解题 ...

  2. iOS本地数据存取,看这里就够了

    本文授权转载,作者:hosea_zhou(简书) 应用沙盒 1)每个iOS应用都有自己的应用沙盒(应用沙盒就是文件系统目录),与其他文件系统隔离.应用必须待在自己的沙盒里,其他应用不能访问该沙盒 2) ...

  3. Machine Learning No.5: Neural networks

    1. advantage: when number of features is too large, so previous algorithm is not a good way to learn ...

  4. 在WAMPSERVER下增加多版本的PHP(PHP5.3,PHP5.4,PHP5.5 ,PHP5.6)支持。

    本人预装了一个wamp的集成环境(Apache 2.4.9 + PHP 5.5.12 + mysql 5.6.17),今天在wamp环境下 添加PHP多版本 (PHP 5.5.30).中间两个过程,1 ...

  5. POSTGRESQL 导入导出

    安装postgresql yum install postgresql postgresql-server mysql占用端口3306 pgsql是5432 2 导入整个数据库 psql -U pos ...

  6. 分享知识-快乐自己:初识 Hibernate 概念片(一)

    1):什么是 Hibernate? Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibe ...

  7. openfire开发环境(3.9.1)

    1.解压源码 2.把build/eclipse中的文件cp到源码跟目录,并修改文件名,前面增加"."号,变成eclipse工程. 3.导入eclipse, 把build/lib/, ...

  8. Sed在匹配行前后加入一行

    a 追加内容 sed ‘/匹配词/a\要加入的内容’ example.file(将内容追加到匹配的目标行的下一行位置)i 插入内容 sed ‘/匹配词/i\要加入的内容’ example.file 将 ...

  9. ACM学习历程—ZOJ3471 Most Powerful(dp && 状态压缩 && 记忆化搜索 && 位运算)

    Description Recently, researchers on Mars have discovered N powerful atoms. All of them are differen ...

  10. 描述怎样通过flask+redis+sqlalchemy等工具,开发restful api

    flask开发restful api系列(8)-再谈项目结构 摘要: 进一步介绍flask的项目结构,使整个项目结构一目了然.阅读全文 posted @ 2016-06-06 13:54 月儿弯弯02 ...