1002 Kanade Loves Maze Designing 35.26%(880/2496)

题意:

  • 给出一棵n个点的树,每个点有权值ci,记A(i,j)表示点i和j之间路径上的不同权值个数,求f(i,x)=∑(j=1->n) A(i,j)*x^{j−1},x=19560929, mod1=1e9+7, mod2=1e9+9.

思路:

  • 因为n<2e3,可以n^2做,所以直接dfs暴力把所有的a[i][j] 枚举出来即可,O(n)枚举每个点,对于每个点dfs到其他所有点跑一遍O(n), 递归的时候开个数组记录路径上的不同权值个数,回溯的时候减掉即可。
  • 对于最后的取模运算,因为多组数据所以可以提前预处理。
#include<bits/stdc++.h>
using namespace std;
typedef long long LL;LL a[2020][2020], c[2020];
vector<int>G[2020];int rt, cnt, ma[2020];
void dfs(int x, int fa){if(ma[c[x]]==0)cnt++;ma[c[x]]++; a[rt][x] = cnt;for(int to : G[x]){if(to!=fa)dfs(to,x);}ma[c[x]]--;if(ma[c[x]]==0)cnt--;
}const LL p1=1e9+7, p2=1e9+9;
LL pow2(LL a,LL b,LL mod){LL r=1;while(b){if(b&1)r=r*a%mod;a=a*a%mod;b>>=1;}return r%mod;}
LL x=19560929;
LL xa[2005],xb[2005];int main(){    for(int i=0;i<=2000;i++)xa[i]=pow2(x,i,1e9+7),xb[i]=pow2(x,i,1e9+9);ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);int T;  cin>>T;while(T--){int n;  cin>>n;for(int i = 1; i <= n; i++)G[i].clear();//initfor(int i = 2; i <= n; i++){int x;  cin>>x;G[i].push_back(x); G[x].push_back(i);}for(int i = 1; i <= n; i++)cin>>c[i];for(int i = 1; i <= n; i++){rt = i;  dfs(i,0);}for(int i = 1; i <= n; i++){LL ans1 = 0, ans2 = 0;for(int j = 1; j <= n; j++){ans1 = ((ans1+a[i][j]*xa[j-1]%p1)%p1+p1)%p1;ans2 = ((ans2+a[i][j]*xb[j-1]%p2)%p2+p2)%p2;}cout<<ans1<<" "<<ans2<<"\n";}}return 0;
}

【HDOJ6986】Kanade Loves Maze Designing(暴力,dfs树)相关推荐

  1. [XSY] 分割(dfs树)

    分割 题目相当于问 删掉两个点后 图是否仍然连通 割点问题,考虑用dfs树解决 设删去点u,v(dfn[v]<dfn[u]) 把 u, v 删去之后整棵树大概断成了几个部分: • v 上面到根的 ...

  2. 仙人掌相关问题的解法(1)-DFS树解决仙人掌DP问题,圆方树

    前言 有难度的仙人掌题在近几年也只是在国家集训队水平的比赛里才会出现. 不过,这不是说仙人掌对国集水平以下的选手意义不大: 首先,仙人掌暴力 DP 问题难度并不大,在省选. NOI 甚至 NOIP 中 ...

  3. 图论 ---- E. Pairs of Pairs(构造+无向图的dfs树的性质)

    题目链接 题目大意: 题目解法: 首先我们先对这个图求一个dfs树dfs树dfs树,那么对dfs树dfs树dfs树求树的直径rrr如果⌈n2⌉≤r\lceil\frac{n}{2}\rceil\leq ...

  4. 图论 ---- 构造DFS树的思想 K - Boomerangs Gym - 102001K

    题目链接 题目大意: 解题思路: 启发性思考首先我们先图切成dfs树,然后给图一个稳定结构之后,我们就可以去构造了 对于每个点我们从第底端开始构造每次把每次点的儿子两两匹配,如果是奇数个儿子就把多出来 ...

  5. Last Theorem CodeForces - 1325F(dfs树找最大环+思维)

    It's the year 5555. You have a graph, and you want to find a long cycle and a huge independent set, ...

  6. Codeforces Round #628 (Div. 2) F. Ehab‘s Last Theorem dfs树

    传送门 文章目录 题意: 思路: 题意: 给你个nnn个点mmm条边的图,可以选择完成以下两个任务中的一个: (1)(1)(1)找出大小恰好为n\sqrt nn​的一个独立集. (2)(2)(2)找出 ...

  7. 图论复习——dfs树,点双,边双,强连通分量

    知识点 dfs树 对一个图运行 dfs 算法,每个点uuu的父亲定义为第一次遍历uuu时的前驱结点,若无则为根. 无向图的 dfs树 没有横叉边. 有向图的 dfs树 横叉边方向唯一,总是从后访问的点 ...

  8. CF732F Tourist Reform(dfs树、边双连通图、tarjan)

    因为知道了算法tag,所以想到了正解: 先给出两个性质: 边双给边定向一定可以转为强连通图,此为最优解 树给边定向后R的最小值必为0 性质2证明如下: 设树有n个节点, 若R_min!=0, 则每点出 ...

  9. [dfs树]「CEOI 2017」One-Way Streets

    不难的题.首先任意环上的边一定不是必经边,答案为B.我们随便搞一颗原图的dfs树,那么非树边,和每条飞树边覆盖的树上的链都是B.在树上打链覆盖的标记即可. 然后是对于每个x到y有路的限制,我们直接在x ...

最新文章

  1. java 线程假醒_Java并发基础05. 传统线程同步通信技术
  2. 【postgresql】远程连接
  3. Qt 实现数据协议控制--组帧、组包、解析帧、解析包
  4. Linux下dislocate命令用法,在 Linux 中遨游手册页的海洋 | Linux 中国
  5. phoenix客户端操作hbase已经存在的表
  6. 由return联想到的
  7. ADO.NET 快速入门(十五):ADO 应用转换为 ADO.NET
  8. linux ida 图形界面,linux – IDA在屏幕内不起作用
  9. TFS小记(3):建立团队项目
  10. MediaCodec解析MP4视频
  11. cocos2d-x学习资源整理(持续更新)
  12. pyqt5在图元上画图_PyQt5的PyQtGraph实践系列1:添加图形到PyQt5布局
  13. Word怎么转PDF?看完这篇你就知道了
  14. 驱动精灵在服务器的系统安装,驱动精灵怎么安装打印机驱动?打印机驱动安装的方法...
  15. iphone7 无法连接计算机看照片,教你iphone7一键导出照片至电脑方法及iPhone7连接电脑itunes没反应怎么办...
  16. python 流程结构练习
  17. 腾讯云服务器安全组配置
  18. 极智AI | 目标检测 VOC 格式数据集制作
  19. 解决idea翻译插件translation无法使用问题
  20. 女生适合学软件测试吗?这个工作压力大不大?

热门文章

  1. matlab 下的集成学习工具箱
  2. 卷积(convolution)与相关(correlation)(matlab 实现)
  3. UNIX 环境高级编程(二)—— linux共享库,/etc/ld.so.conf 及 ld.so.conf.d/libc.conf
  4. PyCharm: Simplify chained comparison
  5. Scala 基础 —— String(StringOps)、tuple、Range
  6. python的官网都打不开了-安装的python为什么打不开
  7. python和c语言的区别-python和c语言的区别是什么
  8. 学python后到底能干什么-学Python后到底能干什么
  9. python自动化办公都能做什么-盘点使用Python进行自动化办公所需要的知识点
  10. python爬虫步骤-Docker部署Python爬虫项目的方法步骤