并查集入门--hd 2079 并查集模板
来源:互联网 发布:非典 真相 知乎 编辑:程序博客网 时间:2024/06/01 20:04
选课时间(题目已修改,注意读题)
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5160 Accepted Submission(s): 3970
Problem Description
又到了选课的时间了,xhd看着选课表发呆,为了想让下一学期好过点,他想知道学n个学分共有多少组合。你来帮帮他吧。(xhd认为一样学分的课没区别)
Input
输入数据的第一行是一个数据T,表示有T组数据。
每组数据的第一行是两个整数n(1 <= n <= 40),k(1 <= k <= 8)。
接着有k行,每行有两个整数a(1 <= a <= 8),b(1 <= b <= 10),表示学分为a的课有b门。
每组数据的第一行是两个整数n(1 <= n <= 40),k(1 <= k <= 8)。
接着有k行,每行有两个整数a(1 <= a <= 8),b(1 <= b <= 10),表示学分为a的课有b门。
Output
对于每组输入数据,输出一个整数,表示学n个学分的组合数。
Sample Input
22 21 22 140 81 12 23 24 25 86 97 68 8
Sample Output
2445
//本程序的本质就是查询存在的连接数 通过总数减去存在的 得到的就是需要增加的最小连接数#include<iostream>using namespace std;int n,m,a,b;int sum,pre[10000];int find(int x){ int r; r=x; while(pre[r]!=r) { r=pre[r]; } int i=x,j; while(i!=r) { j=pre[i];//记录值 pre[i]=r; i=j; } return r;}void join(int x,int y){ int fx=find(x),fy=find(y); if(fx!=fy) { pre[fx]=fy; sum--; }}int main(){ while(cin>>n&&n) { cin>>m; sum=n-1; for(int i=1;i<=n;i++)//初始化连接点 pre[i]=i; for(int i=1;i<=m;i++) { cin>>a>>b; join(a,b); } cout<<sum<<endl; } return 0;}
阅读全文
0 0
- 并查集入门--hd 2079 并查集模板
- 并查集入门--hd 1863
- 并查集入门--hd 1213
- 并查集模板
- 并查集模板
- 并查集模板
- 并查集模板
- 【模板】并查集
- 并查集模板
- 并查集模板
- 并查集模板
- 并查集模板
- 并查集【模板】
- 并查集 模板
- 并查集模板
- 并查集模板
- 并查集模板
- 并查集模板
- 博弈
- Java--正则表达式(五)
- html,css学习笔记
- Faster R-CNN——ROIDB和Minibatch函数调用分析
- java数据结构与算法之平衡二叉树(AVL树)的设计与实现
- 并查集入门--hd 2079 并查集模板
- div图片水平垂直居中不随滚动条滚动的CSS代码(兼容IE8+)
- 锁、PV操作、进程互斥与同步的实现
- window+python3.6环境下安装numby和pip
- navicat本地oracle连接
- PHP 变量友好化打印输出
- Xlistview 使用
- HDU 5067 状态压缩DP + TSP
- 灾后重建 洛谷p1119