ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

《Twinkle Twinkle Little Star》

2021-04-13 08:32:58  阅读:149  来源: 互联网

标签:Little const Twinkle int -- typedef read Star define


这题一开始没注意到d的范围,所以没做出来。

这里我们可以想到的是,我们对询问反向涂色,那么对于已经涂过的点的颜色就是最终颜色,那么就减少了很多重复的不必要操作。

然后因为d最大只有10,所以我们维护每个点已经涂到过的最远距离之后,暴搜染色的复杂度就最大为10 * m左右。(即d从0开始一直+1)

#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
typedef pair<int,int> pii;
const int N = 1e5 + 5;
const int M = 5e5 + 5;
const LL Mod = 1e9 + 7;
#define pi acos(-1)
#define INF 1e18 + 5
#define dbg(ax) cout << "now this num is " << ax << endl;
namespace FASTIO{
    inline LL read(){
        LL x = 0,f = 1;char c = getchar();
        while(c < '0' || c > '9'){if(c == '-') f = -1;c = getchar();}
        while(c >= '0' && c <= '9'){x = (x<<1)+(x<<3)+(c^48);c = getchar();}
        return x*f;
    }
}
using namespace FASTIO;

int n,m,ans[N],mx[N];
vector<int> G[N];
struct Node{
    int v,d,c;
}p[N];
vector<int> vec[N];
void dfs(int u,int fa,int d,int c) {
    if(d == -1 || mx[u] >= d) return ;
    if(ans[u] == -1) ans[u] = c;
    mx[u] = d;
    for(auto v : G[u]) {
        if(v == fa) continue;
        dfs(v,u,d - 1,c);
    }
}
int main()
{
    n = read(),m = read();
    while(m--) {
        int x,y;x = read(),y = read();
        G[x].push_back(y);
        G[y].push_back(x);
    }
    int q;q = read();
    for(int i = 1;i <= q;++i) p[i].v = read(),p[i].d = read(),p[i].c = read();
    for(int i = 1;i <= n;++i) mx[i] = -1,ans[i] = -1;
    for(int i = q;i >= 1;--i) {
        if(p[i].d <= mx[p[i].v]) continue;
        dfs(p[i].v,0,p[i].d,p[i].c);
    }
    for(int i = 1;i <= n;++i) if(ans[i] == -1) ans[i] = 0;
    for(int i = 1;i <= n;++i) printf("%d\n",ans[i]);
    system("pause");
    return 0;
}
View Code

 

标签:Little,const,Twinkle,int,--,typedef,read,Star,define
来源: https://www.cnblogs.com/zwjzwj/p/14651453.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有