ZOJ-1789
来源:互联网 发布:oracle导出表空间数据 编辑:程序博客网 时间:2024/06/10 23:34
并查集,其实kruskal算法里用过,不过不熟练,感觉代码还可以改进,懒的优化了,明天还要上班。。好困,睡觉去鸟
#include<stdio.h>#include<stdlib.h>struct StudentStruct{int id;struct StudentStruct *parent;int rank;};typedef struct StudentStruct *Student;Student make_set(int id){Student stu = malloc(sizeof(struct StudentStruct));stu->parent = stu;stu->id = id;stu->rank = 1;return stu;}Student find_set(Student stu){if (stu->parent != stu)stu->parent = find_set(stu->parent);return stu->parent;}static void link(Student s1, Student s2){if (s1->rank > s2->rank){s2->parent = s1;s1->rank += s2->rank;}else{s1->parent = s2;s2->rank += s1->rank;}}static void union_set(Student s1, Student s2){link(find_set(s1), find_set(s2));}int main(){int n, m;Student *array = malloc(30000 * sizeof(Student));while (scanf("%d %d", &n, &m), n || m){int i, j, k, id;for (i = 0; i < n; i++)array[i] = NULL;for (i = 0; i < m; i++){scanf("%d", &k);Student head;if (k){scanf("%d", &id);if (array[id] == NULL)array[id] = make_set(id);head = find_set(array[id]);}for (j = 1; j < k; j++){scanf("%d", &id);if (array[id] == NULL)array[id] = make_set(id);if (find_set(head) != find_set(array[id]))union_set(head, array[id]);}}if (array[0] == NULL)puts("1");elseprintf("%d\n", find_set(array[0])->rank);}free(array);return 0;}
0 0
- zoj 1789
- zoj 1789
- zoj-1789
- ZOJ-1789
- ZOJ 1789 The Suspects
- zoj 1789 The Suspects
- zoj 1789 The Suspects
- zoj 1789 The Suspects
- zoj - 1789 - The Suspects
- zoj 1789 The Suspects
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- ZOJ
- C/C++ 笔试、面试题目大汇总2
- POJ 2778 DNA Sequence
- 内存查错与GFlags、AppVerifier、Pageheap.exe介绍
- 解决异构系统之间交互——Web Service
- Android OpenCV学习
- ZOJ-1789
- MySql可视化工具MySQL Workbench使用教程
- MBR与GPT分区扫盲,希捷2T、3T硬盘测评(多图杀猫)
- 读《文化的重要作用》笔记
- Android学习札记之编译系统(五)apk编译流程
- JS比较2个日期间隔
- Ubuntu下创建android项目 无法生成R.java文件
- Windows系统下载
- 线程死锁demo