MemoryGarden's Blog

努力 -----------大能猫

C++博客 首页 新随笔 联系 聚合 管理
  118 Posts :: 11 Stories :: 20 Comments :: 0 Trackbacks
竟然一次就过了。。。。真是罕见。。

http://acm.pku.edu.cn/JudgeOnline/problem?id=1789

题意 :看discus了。。。。就是每个字符串相同位置,位置不同的,这样,这两个字符串的距离就+1。最后要求距离和倒数最大,就代表距离最小。所以最小生成树搞 克鲁斯卡尔 + 并查集合

没有变态数据,不过数据量貌似很大啊

 1 #include <stdio.h>
 2 #include <math.h>
 3 #include <algorithm>
 4 #define max 2001
 5 using namespace std;
 6 int m, n, p[max];
 7 char input[max][8];
 8 struct E{
 9     int u, v, w;
10 }e[4000000];
11 int cmp(E a, E b){
12     return a.w > b.w;
13 }
14 int find(int x){
15     if(x != p[x])return p[x] = find(p[x]);
16     return p[x];
17 }
18 int main(){
19     int i, j, u, v, dis, k, c, tc, res;
20     while(scanf("%d"&m), m){
21         c = res = 0;
22         for(i = 0; i < max; i++)
23             p[i] = i;
24         for(i = 1; i <= m; i++)
25             scanf("%s", input[i]);
26         for(i = 1; i <= m; i++){
27             for(j = i + 1; j <= m; j++){
28                 dis = 0;
29                 if(i != j){
30                     for(k = 0; k < 8; k++)
31                         if(input[i][k] != input[j][k])dis++;
32                     if(dis){
33                 //        printf("%d -> %d = %d\n", i, j, dis);
34                         e[c].u = i;
35                         e[c].v = j;
36                         e[c++].w = dis;
37                     }
38                 }
39             }
40         }
41         tc = c;
42         make_heap(e, e + c, cmp);
43     //    printf("%d %d %d\n", e[0].u, e[0].v, e[0].w);
44         for(n = 1; n < m; tc--){
45             if(!tc)break;
46             if((u = find(e[0].u)) != (v = find(e[0].v))){
47                 p[u] = v;n++;
48                 res += e[0].w;
49             }
50         //    printf("%d %d %d\n", e[0].u, e[0].v, e[0].w);
51             pop_heap(e, e + tc, cmp);
52         }
53         printf("The highest possible quality is ");
54         if(res)
55             printf("1/%d.\n", res);
56         else puts("0.");
57     }
58     return 0;
59 }

posted on 2008-09-04 00:26 memorygarden 阅读(690) 评论(0)  编辑 收藏 引用 所属分类: 报告

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理