TYVJ 1111 舞会 强联通分量版解题报告
2011-08-07 21:08
411 查看
终于琢磨出来了强联通分量,看了不少资料啊~~有三种算法,我用的第一种,最慢的,但是也是最普遍的。。
具体讲解看我转的一篇文章吧,代码如下:
具体讲解看我转的一篇文章吧,代码如下:
#include <stdio.h> #include <string.h> #include <stdlib.h> int num[200]; int map[200][200]; int count[200]; int rmap[200][200]; int rcount[200]; int group[200]; int order[200]; int flag[200]; int now; void srch1(int i) { int j; flag[i] = 1; for(j = 0; j < count[i]; j++){ if(!flag[map[i][j]]){ srch1(map[i][j]); } } order[++now] = i; } void srch2(int i, int k) { int j; flag[i] = 1; group[i] = k; for(j = 0; j < rcount[i]; j++){ if(!flag[rmap[i][j]]){ srch2(rmap[i][j], k); } } } int main(int argc, char **argv) { int i; int n; scanf("%d", &n); for(i = 0; i < n; i++){ do{ scanf("%d", &num[i]); if(num[i] == 0){ break; } num[i]--; map[i][count[i]++] = num[i]; rmap[num[i]][rcount[num[i]]++] = i; }while(1); } memset(flag, 0, sizeof(flag)); for(i = 0; i < n; i++){ if(!flag[i]){ srch1(i); } } memset(flag, 0, sizeof(flag)); for(now = 0, i = n; i >= 1; i--){ if(!flag[order[i]]){ srch2(order[i], ++now); } } printf("%d\n", now); return 0; }
相关文章推荐
- TYVJ 1111 舞会 解题报告
- tyvj 1111 舞会 用kosaruju算法求强联通分量的个数
- POJ 2942 Tarjan双联通分量+二分图 解题报告
- HDU2242 考研路茫茫——空调教室 解题报告【边双联通分量+树上dp】
- tyvj 1111 舞会 有向图强连通分量 Kosaraju模板 tarjan模板
- TYVJ 1112 舞会2 解题报告
- TYVJ 1080 N皇后 解题报告
- TYVJ 1142 阶乘统计3 解题报告
- tyvj 衡水中学60周年赛 解题报告
- TYVJ 1071 LCIS 解题报告
- TYVJ 1093 验证数独 解题报告
- TYVJ 1114 搭建双塔 解题报告
- TYVJ 1512 异或密码 解题报告
- TYVJ 1123 道路游戏 解题报告
- [Tyvj1111 舞会]
- 好长时间没写解题报告了,这次来两道水题:超级书架1099 和 超级书架2 1100 TYVJ
- TYVJ 1082 找朋友 解题报告
- TYVJ 1099 超级书架 解题报告
- Vijos P1023Victoria的舞会3【贪心+DFS求强联通分量】
- TYVJ 1057 金明的预算方案 解题报告