题意:

有一个含有n个点的无向图,所有的点最初颜色均为0。有q次操作,每次操作将v[i]周围的距离小于等于d[i]的点全部都染成颜色c[i]。最后输出每个点的最终的颜色。

数据范围:

1<=n,m,q<=10^5

0<=d[i]<=10

1<=c[i]<=10^5

思路:

看见1<=d[i]<=10,这个条件,第一反应当然是暴力啦。但是如果从一个点总是能够访问所有的节点,那么这就变成O(n^2)了。那么我们应当考虑时间复杂度更加稳定的算法。

然后开始考虑如何优化。倒着扫操作是很容易想到的。然后可以对于每一个点维护一个对于当前已经扫完的操作的最大值。假如说当前在点v,然后当前的d为d[i],假如说d[i]<=maxd[v],那么就说明在后面的操作中将当前这一次操作所产生的效果抵消了。于是就可以直接返回了。

经过上述的优化之后,我们发现能够进入一个点并成功进行拓展的条件是d[i]>maxd[v],那么因为1<=d[i]<=10,所以说就算d[i]从1~10依次排列,也只会对于v点访问最多10次。这样子时间复杂度就变为了稳定的O(10*n+m),从而稳当了不少。

代码:

#include<cstdio>
#include<cstring>
#include<algorithm>
#define MAXN 100000
using namespace std;
struct node
{
int to;
node *nxt;
}edges[MAXN*2+5];
node *ncnt=&edges[0],*Adj[MAXN+5];
int n,m,q,col[MAXN+5],maxd[MAXN+5];
int V[MAXN+5],D[MAXN+5],C[MAXN+5];
void Init()
{
memset(maxd,-1,sizeof(maxd));
}
void AddEdge(int u,int v)
{
node *p=++ncnt;
p->to=v;
p->nxt=Adj[u];
Adj[u]=p; node *q=++ncnt;
q->to=u;
q->nxt=Adj[v];
Adj[v]=q;
}
void DFS(int u,int d,int c)
{
if(col[u]==0)//没有赋过值才赋值
col[u]=c;
if(maxd[u]>=d)//判断当前操作是否被后面的操作覆盖了
return;
if(d==0)//到达能够赋值的边界了
return;
maxd[u]=d;
for(node *p=Adj[u];p!=NULL;p=p->nxt)
{
int v=p->to;
DFS(v,d-1,c);//d--,继续赋值
}
}
int main()
{
Init();
scanf("%d %d",&n,&m);
int u,v;
for(int i=1;i<=m;i++)
{
scanf("%d %d",&u,&v);
AddEdge(u,v);
}
scanf("%d",&q);
for(int i=1;i<=q;i++)
scanf("%d %d %d",&V[i],&D[i],&C[i]);
for(int i=q;i>=1;i--)//倒着处理
DFS(V[i],D[i],C[i]);
for(int i=1;i<=n;i++)
printf("%d\n",col[i]);
return 0;
}

【AtCoder】【思维】【图论】Splatter Painting(AGC012)的更多相关文章

  1. AtCoder Grand Round 012B Splatter Painting

    本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...

  2. AtCoder Grand Contest 012 B - Splatter Painting(dp)

    Time limit : 2sec / Memory limit : 256MB Score : 700 points Problem Statement Squid loves painting v ...

  3. AtCoder Grand Contest 012 B Splatter Painting (反向处理 + 记忆化)

    题目链接  agc012 Problem B 题意  给定一个$n$个点$m$条边的无向图,现在有$q$个操作.对距离$v$不超过$d$的所有点染色,颜色编号为$c$. 求每个点最后的颜色状态. 倒过 ...

  4. AtCoder Grand Contest 012 B Splatter Painting(记忆化搜索)

    题意: 给一个包含N个顶点,M条边,无自环和重边的简单无向图,初始每个点颜色都为0,每条边的长度为1,连接着ai,bi两个节点.经过若干个操作, 每次将与某个点vi距离不超过di的所有点染成某种颜色c ...

  5. 计蒜客 17417 Highest Tower(思维+图论)

    题解: 实际上一个可行解即选取长和宽的一个,使得最后每一组选第一维的数值都不同 在此基础上,使得另一维的和最大. 然后建立图论模型 对于每一个方块,在a和b之间连边. 对于选择的方案,如果选择a-&g ...

  6. Almost Acyclic Graph CodeForces - 915D (思维,图论)

    大意: 给定无向图, 求是否能删除一条边后使图无环 直接枚举边判环复杂度过大, 实际上删除一条边可以看做将该边从一个顶点上拿开, 直接枚举顶点即可 复杂度$O(n(n+m))$ #include &l ...

  7. Codeforces Gym 101142 C. CodeCoder vs TopForces(思维+图论)

    题意: 每个人有两个积分CC和TF 第i个人能战胜第j个人的条件满足下面两个条件中的一个即可 1.CCi > CCj 或 TFi > TFj 2.i能战胜k,k能战胜j. 题解: 先按CC ...

  8. AGC 012 B - Splatter Painting

    题面在这里! (显然首先想到反着做比较简单,每个点取第一次被覆盖到的颜色) 发现d非常小,那么是否可以暴力覆盖呢??? 考虑一个稠密图..暴力肯定就gg了啊... 不过我们可以对每一个点 i 记一个m ...

  9. 【AtCoder】AGC012

    AGC012 A - AtCoder Group Contest 从最后开始间隔着取就行 #include <bits/stdc++.h> #define fi first #define ...

随机推荐

  1. Win10修改编辑文件无法保存怎么办(没有权限)

    Win10修改编辑hosts文件无法保存怎么办 修改一些系统文件无法保存说明这个账户没有“写”这个权限 这里以hosts文件为例,为账户增加读写权限: 首先进入Win10系统的hosts文件所在位置 ...

  2. halcon+WinForm显示rgb图并灰度化

    1.halcon代码,并导出成C# read_image (Demo, 'C:/Users/user/Pictures/demo.jpg') dev_display (Demo) rgb1_to_gr ...

  3. python6-深浅拷贝 元组类型 字典类型 集合类型

    一,深浅拷贝 (一) 值拷贝:应用场景最多 案例:1.ls = [1, 'abc', [10]]    ls1 = ls     # :ls1直接将ls中存放的地址拿过来#  :    ls内部的值发 ...

  4. Maven 学习总结 (一)

    一.何为Maven 1.Maven是优秀的构建工具 maven的用途之一是用于构建,他是一个强大的构建工具,能够帮助我们自动化构建过程,从清理.编译.测试到生成报告,再到打包和部署. 他抽象了一个完整 ...

  5. HDU 5984(求木棒切割期望 数学)

    题意是给定一长为 L 的木棒,每次任意切去一部分直到剩余部分的长度不超过 D,求切割次数的期望. 若木棒初始长度不超过 D,则期望是 0.000000: 设切割长度为 X 的木棒切割次数的期望是 F( ...

  6. [物理学与PDEs]第4章第3节 一维反应流体力学方程组 3.2 一维反应流体力学方程组的 Lagrange 形式

    1.  一维粘性热传导反应流体力学方程组的 Lagrange 形式 $$\beex \bea \cfrac{\p \tau}{\p t'}-\cfrac{\p u}{\p m}&=0,\\ \ ...

  7. LATEX简易教程

    1.LaTeX软件的安装和使用方法A(自助):在MikTeX的官网下载免费的MikTeX编译包并安装.下载WinEdt(收费)或TexMaker(免费)等编辑界面软件并安装.方法B(打包):在ctex ...

  8. 锁定表头和固定列(Fixed table head and columns)

    源码: /// <summary> /// 锁定表头和列 /// <para> sorex.cnblogs.com </para> /// </summary ...

  9. RT-SA-2019-005 Cisco RV320 Command Injection Retrieval

    Advisory: Cisco RV320 Command Injection RedTeam Pentesting discovered a command injection vulnerabil ...

  10. Codeforces 1100F(线性基+贪心)

    题目链接 题意 给定序列,$q(1\leq q \leq 100000) $次询问,每次查询给定区间内的最大异或子集. 思路 涉及到最大异或子集肯定从线性基角度入手.将询问按右端点排序后离线处理询问, ...