原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-G.html

题目传送门 - 2018牛客多校赛第三场 G

题意

  给定一个 $n$ 个节点的树,有 $k$ 种颜色。

  现在让你给每一个节点都染上一种颜色,总共有 $k^n$ 种方法。

  现在问,在所有染色方案中,使得相同颜色点对之间的最短距离为 $D$ 的有多少种方案。

  答案对于 $10^9+7$ 取模。

  $n,k,d\leq 5000$

题解

  首先我们来算一下相同颜色点对之间的最短距离不小于 $D$ 的情况。

  我们考虑 bfs 。

  对于当前节点,我们找出已经访问过的节点中与当前节点的距离小于 $D$ 的节点。

  由于我们是 bfs 的,可以证明找出的这些节点任意两个之间的距离一定小于 $D$ 。所以这些节点的颜色互不相同。

  记这些节点的总个数为 $cnt$ ,则当前节点可以染的颜色种数为 $k-cnt$ 。

  那么答案就累乘一下就可以了。

  时间复杂度 $O(n^2)$ 。

  但是我们要求的是等于 $D$ 的情况。

  怎么做?

  减掉大于 $D$ 的情况种数即可。

代码

#include <bits/stdc++.h>
using namespace std;
const int N=5005,mod=1e9+7;
struct Gragh{
static const int M=N*2;
int cnt,y[M],nxt[M],fst[N];
void clear(){
cnt=0;
memset(fst,0,sizeof fst);
}
void add(int a,int b){
y[++cnt]=b,nxt[cnt]=fst[a],fst[a]=cnt;
}
}g;
int n,k,D;
int vis[N],Q[N],head,tail;
int cnt1,cnt2;
void dfs(int x,int pre,int d){
if (d>D+1)
return;
if (d<=D)
cnt1++;
cnt2++;
for (int i=g.fst[x];i;i=g.nxt[i])
if (g.y[i]!=pre&&vis[g.y[i]])
dfs(g.y[i],x,d+1);
}
int main(){
scanf("%d%d%d",&n,&k,&D),D--;
g.clear();
for (int i=1,a,b;i<n;i++){
scanf("%d%d",&a,&b);
g.add(a,b);
g.add(b,a);
}
memset(vis,0,sizeof vis);
head=tail=0;
Q[++tail]=1;
int ans1=1,ans2=1;
while (head<tail){
int x=Q[++head];
vis[x]=1,cnt1=cnt2=-1;
dfs(x,0,0);
cnt1=max(k-cnt1,0),cnt2=max(k-cnt2,0);
ans1=1LL*ans1*cnt1%mod;
ans2=1LL*ans2*cnt2%mod;
for (int i=g.fst[x];i;i=g.nxt[i])
if (!vis[g.y[i]])
Q[++tail]=g.y[i];
}
printf("%d",(ans1-ans2+mod)%mod);
return 0;
}

  

2018牛客网暑假ACM多校训练赛(第三场)G Coloring Tree 计数,bfs的更多相关文章

  1. 2018牛客网暑假ACM多校训练赛(第二场)E tree 动态规划

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round2-E.html 题目传送门 - 2018牛客多校赛第二场 E ...

  2. 2018牛客网暑假ACM多校训练赛(第三场)I Expected Size of Random Convex Hull 计算几何,凸包,其他

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-I.html 题目传送门 - 2018牛客多校赛第三场 I ...

  3. 2018牛客网暑假ACM多校训练赛(第三场)D Encrypted String Matching 多项式 FFT

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round3-D.html 题目传送门 - 2018牛客多校赛第三场 D ...

  4. 2018牛客网暑假ACM多校训练赛(第十场)H Rikka with Ants 类欧几里德算法

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-H.html 题目传送门 - https://www.n ...

  5. 2018牛客网暑假ACM多校训练赛(第十场)F Rikka with Line Graph 最短路 Floyd

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-F.html 题目传送门 - https://www.n ...

  6. 2018牛客网暑假ACM多校训练赛(第十场)D Rikka with Prefix Sum 组合数学

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round10-D.html 题目传送门 - https://www.n ...

  7. 2018牛客网暑假ACM多校训练赛(第八场)H Playing games 博弈 FWT

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round8-H.html 题目传送门 - https://www.no ...

  8. 2018牛客网暑假ACM多校训练赛(第七场)I Tree Subset Diameter 动态规划 长链剖分 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round7-I.html 题目传送门 -  https://www.n ...

  9. 2018牛客网暑假ACM多校训练赛(第六场)I Team Rocket 线段树

    原文链接https://www.cnblogs.com/zhouzhendong/p/NowCoder-2018-Summer-Round6-I.html 题目传送门 - https://www.no ...

随机推荐

  1. MS SqlServer还原数据库,出现媒体簇的结构不正确

    出现此问题,是数据库版本过低导致,只要保证连接实例所在的版本号>=要还原的数据库的版本号,即可还原成功. 可以使用select @@VERSION,查看当前实例版本.

  2. 自定义session,cookie

    第一种情况:没有设置缓存:执行相对应的setitem等方法进行,保存到字典里面 cookies_dic={}print(cookies_dic)class Session(): def __init_ ...

  3. C#中lock死锁实例教程

    这篇文章主要介绍了C#中lock死锁的用法,对于共享资源的访问及C#程序设计的安全性而言,有着非常重要的意义!需要的朋友可以参考下 链接:http://www.jb51.net/article/543 ...

  4. liux三剑客grep 正则匹配

    001正则匹配(大部分需要转义) ‘^‘: 锚定行首 '$' : 锚定行尾 [0-9] 一个数字 [^0-9] 除去数字所有,^出现在[]这里表示取反 [a-z] [A-Z] [a-Z] \s 匹配空 ...

  5. ACM-ICPC 2018 焦作赛区网络预赛 G Give Candies

    There are NNN children in kindergarten. Miss Li bought them NNN candies. To make the process more in ...

  6. C#结婚吧(if else if)

  7. vuforia unity 识别图片出模型

    ARCamera设置: 然后设置ImageTarge

  8. Eclipse 软件 Java 解决:出现的editor does not contain a main type错误框 问题

    Eclipse 软件 解决:出现的 editor does not contain a main type 错误框 问题 当你运行 Java文件是,如果弹出了下面的 错误框: 出现错误的原因: 当前的 ...

  9. Confluence 6 推荐的更新通知设置和禁用

    你可以设置默认的发送选项(发送 / 不发送)和默认的发送时间(每天或每周). 如何配置推荐更新电子邮件通知: 在屏幕的右上角单击 控制台按钮 ,然后选择 General Configuration 链 ...

  10. Confluence 6 为外部用户管理获得支持

    本页面描述了如果你在配置外部用户管理的时候遇到了问题,如何向 Atlassian 支持项目组寻求帮助.外部用户目录挂你包括 Active Directory,其他 LDAP 服务器,Atlassian ...