zoukankan      html  css  js  c++  java
  • poj 1789 kruscal水题

    继续水水题。。。

    题目:http://poj.org/problem?id=1789

    把车看成结点,车之间的距离看作权重就是一个图了,然后求最小生成树。。。

    的确水题,但看题目花了挺长时间,不知道如果现场遇到这种题目会多蛋疼。。。

    这题时限2000ms,但用kruscal+sort写出来wa了,换用qsort的话果断超时了,翻了下网上的题解,发现貌似得用const void *传入参数才能快点。

    修改完发现又wa了,然后gdb调了一遍,最后发现输出忘了个.。。。无语死。。。

    额,后来是sort 1200+ms,qsort 600+ms。。。

    贴代码(qsort):

    #include <cstdio>
    #include <algorithm>
    using namespace std;
    const int maxn = 2001;
    //poj1789
    
    
    struct Edge{
    	int x, y, v;
    };
    struct Edge e[maxn*maxn];
    int f[maxn];
    
    void init(int n) {
    	for (int i = 0; i < n; i++)
    		f[i] = i;
    }
    
    int find(int x) {
    	if (f[x] != x)
    		return f[x] = find(f[x]);
    	return x;
    }
    
    int chcmp(const char* a, const char * b) {
    	int cnt = 0;
    	for (int i = 0; i < 7; i++)
    		if (a[i] != b[i])
    			cnt++;
    	return cnt;
    }
    
    int cmp(const void * a, const void * b){
    	return (*(struct Edge *)a).v - (*(struct Edge *)b).v;
    }
    
    int main() {
    	int n;
    	int i, j, cnt, shortest, select;
    	char str[maxn][7], tmp[7];
    //	freopen ("in", "r", stdin);
    	while (scanf("%d", &n) && n) {
    		init(n);
    		gets(str[0]);
    		for (i = 0; i < n; i++)
    			gets(str[i]);
    		cnt = 0;
    		for (i = 0; i < n; i++)
    			for (j = i + 1; j < n; j++) {
    				e[cnt].x = i;
    				e[cnt].y = j;
    				e[cnt].v = chcmp(str[i], str[j]);
    				cnt++;
    			}
    		qsort(e, cnt, sizeof(e[0]), cmp);
    		shortest = 0;
    		select = 0;
    		for (i = 0; i < cnt; i++) {
    			int a, b;
    			a = find(e[i].x);
    			b = find(e[i].y);
    			if (a != b){
    				f[a] = b;
    				shortest += e[i].v;
    				if (++select == n - 1)
    					break;
    			}
    		}
    		printf("The highest possible quality is 1/%d.\n", shortest);
    	}
    	return 0;
    }




    prim

  • 相关阅读:
    Linux 忘记root密码
    Linux 基础命令
    Linux 运行级别
    Oracle 体系结构
    Oracle 数据库启动过程
    数据库设计范式
    Oracle通过ROWID删除表中重复记录
    JACASCRIPT--的奇技技巧的44招
    css 的小细节,小总结
    关于我们DOM的知识点
  • 原文地址:https://www.cnblogs.com/java20130723/p/3212145.html
Copyright © 2011-2022 走看看