Codeforces 156D Clues (图论, 并查集, 卡特兰数)
2015-09-07 19:57
495 查看
题意:给出一个森林,问用最少的边将其连接成一颗树有多少种连接方式.
思路:这道题是一个推导公式的题,涉及到树的生成数计数的问题,但是我现在仍然不知道题目中的n^p是怎么用得到的,先挖个坑在这儿,以后明白了再来填坑.
代码:
思路:这道题是一个推导公式的题,涉及到树的生成数计数的问题,但是我现在仍然不知道题目中的n^p是怎么用得到的,先挖个坑在这儿,以后明白了再来填坑.
代码:
[code]#include <bits/stdc++.h> using namespace std; const int maxn = 100000 + 5; int par[maxn]; typedef long long LL; int find(int x) { return x == par[x] ? x : par[x] = find(par[x]); } int n, m, k; int cnt[maxn]; int main() { scanf("%d%d%d", &n, &m, &k); for(int i = 0; i <= n; i++) par[i] = i; for(int i = 0; i < m; i++) { int a, b; scanf("%d%d", &a, &b); par[find(a)] = find(par[b]); } for(int i = 1; i <= n; i++) { cnt[find(i)]++; } LL ans = 1; int p = 0; for(int i = 1; i <= n; i++) { if(i == par[i]) { ans = ans*cnt[i]%k; p++; } } if(p == 1) { ans /= cnt[find(1)]; } for(int i = 0; i < p - 2; i++) { ans = ans*n%k; } cout << ans << endl; return 0; }
相关文章推荐
- UISearchBar的基本用法
- easyui 布局
- EasyUI中datagrid控件的Editor
- build.gradle 各种错误解决总结
- 步骤条的实现原理及AliceUI中步骤条Step的应用
- UINavigationControllr 【导航控制器】自己的见解
- Android中的权限管理(基于uid gid gids setUid)
- UIday1001:UITableView 2 编辑(添加、删除)、移动、UITableViewController
- UICollectionView用法总结
- 让 IE9 以下的浏览器支持 Media Queries
- "this class is not key value coding-compliant for the key ..."问题的解决
- squeeze函数
- easyui的combobox兼容火狐浏览器
- hdu 5033 Building (单调栈 或 暴力枚举 )
- arduino pro mini不能下载
- Druid原理介绍(1)
- cubieboard在移植RT3070时,出现“rt2x00lib_request_firmware: Error - Failed to request Firmware”解决方案
- easyui.datagrid
- QuickXDev增强功能:Compile Scripts(编译及加密源代码)
- 通过self.view获得顶端的ViewController