| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1578 人关注过本帖
标题:kruskal算法的题 哪有问题啊 总TLE
只看楼主 加入收藏
菜鸟选手
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2008-5-5
收藏
 问题点数:0 回复次数:12 
kruskal算法的题 哪有问题啊 总TLE
Constructing Roads
Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other)
Total Submission(s) : 328   Accepted Submission(s) : 104



Problem Description


There are N villages, which are numbered from 1 to N, and you should build some roads such that every two villages can connect to each other. We say two village A and B are connected, if and only if there is a road between A and B, or there exists a village C such that there is a road between A and C, and C and B are connected.

We know that there are already some roads between some villages and your job is the build some roads such that all the villages are connect and the length of all the roads built is minimum.



Input


The first line is an integer N (3 <= N <= 100), which is the number of villages. Then come N lines, the i-th of which contains N integers, and the j-th of these N integers is the distance (the distance should be an integer within [1, 1000]) between village i and village j.

Then there is an integer Q (0 <= Q <= N * (N + 1) / 2). Then come Q lines, each line contains two integers a and b (1 <= a < b <= N), which means the road between village a and village b has been built.



Output


You should output a line contains an integer, which is the length of all the roads to be built such that all the villages are connected, and this value is minimum.



Sample Input


3
0 990 692
990 0 179
692 179 0
1
1 2

Sample Output


179

Source


kicc


Recommend


Eddy

#include <iostream>
#include <cstdio>
#include <algorithm>
using namespace std;
const int MAX=3000;
int Map[MAX][MAX]={0},S[MAX]={0},sum=0;

struct ArcInfo{
    int front;
    int rear;
    int weight;
};
ArcInfo A[MAX];

bool cmp(ArcInfo a,ArcInfo b){
    return a.weight<b.weight;
}


int Find(int v){
    int i=v;
    while(S[i]>0) i=S[i];
    return i;
}

void Kruskal(int n,int cnt,int arc){
    int i=0,j=0;
    int v1,v2;
    while(i<n-1-cnt&&j<arc)
    {
        v1=Find(A[j].front);
        v2=Find(A[j].rear);
        if(v1!=v2)
        {
            sum+=A[j].weight;
            S[v1]=v2;
            ++i;
        }
        ++j;
    }
}
   
int main(){
    int n;
    while(scanf("%d",&n)&&n)
    {
        int i,j;
        for(i=0;i<n;++i)
            for(j=0;j<n;++j)
                scanf("%d",&Map[i][j]);
        int arc=0;       //记录边数
        for(i=0;i<n;++i)
            for(j=0;j<n;++j)
                if(Map[i][j])   
                {
                    A[arc].front=i;
                    A[arc].rear=j;
                    A[arc].weight=Map[i][j];
                    Map[i][j]=Map[j][i]=0;
                    ++arc;
                }
        int cnt,x,y;
        scanf("%d",&cnt);
        for(i=0;i<cnt;++i)
        {
            scanf("%d%d",&x,&y);
            S[x-1]=y-1;
        }
        sort(A,A+arc,cmp);
        Kruskal(n,cnt,arc); //n结点数,cnt已连边数
        printf("%d\n",sum);
        
    }
    return 0;
}
搜索更多相关主题的帖子: TLE kruskal 算法 Submission village 
2008-05-05 20:08
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
........................

[color=white]

[[it] 本帖最后由 雨中飛燕 于 2008-5-5 20:13 编辑 [/it]]
2008-05-05 20:11
cdmalcl
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:24
帖 子:4091
专家分:524
注 册:2005-9-23
收藏
得分:0 
ls最近真闲啊~~
是不是着急找LG呢
2008-05-05 20:19
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
貌似楼主这样写有死循环的危险(还没仔细看)

还有,楼上是什么意思

[color=white]
2008-05-05 20:35
菜鸟选手
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2008-5-5
收藏
得分:0 
谁给个用并查集实现kruskal算法的码..
 -,-
2008-05-05 20:39
菜鸟选手
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2008-5-5
收藏
得分:0 
LS的再灌水 拖出去割小JJ ..
2008-05-05 20:41
菜鸟选手
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2008-5-5
收藏
得分:0 
-,- 那你给个思路
2008-05-05 21:02
雨中飛燕
Rank: 1
等 级:新手上路
帖 子:765
专家分:0
注 册:2007-10-13
收藏
得分:0 
你的只是没有加优化的并查集,加上路径压缩和和rank合并再试试吧
10楼的你不要指望你的楼上现在帮得了你什么

[color=white]

[[it] 本帖最后由 雨中飛燕 于 2008-5-5 21:08 编辑 [/it]]
2008-05-05 21:05
菜鸟选手
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2008-5-5
收藏
得分:0 
闪"银"..
 
2008-05-05 21:08
菜鸟选手
Rank: 1
等 级:新手上路
帖 子:132
专家分:0
注 册:2008-5-5
收藏
得分:0 
!!!!!!!!!!!!!!!!

[[it] 本帖最后由 菜鸟选手 于 2008-5-5 22:07 编辑 [/it]]
2008-05-05 21:59
快速回复:kruskal算法的题 哪有问题啊 总TLE
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.052923 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved