Online JudgeProblem SetAuthorsOnline ContestsUser
Web Board
Home Page
F.A.Qs
Statistical Charts
Problems
Submit Problem
Online Status
Prob.ID:
Register
Update your info
Authors ranklist
Current Contest
Past Contests
Scheduled Contests
Award Contest
User ID:
Password:
  Register

Re:Kruskal 并查集做的 为神马wa ...

Posted by Azure_Air at 2013-04-12 19:32:13 on Problem 1258
In Reply To:Kruskal 并查集做的 为神马wa ... Posted by:Wenice at 2012-04-20 15:26:35
> #include <iostream>
> #include <algorithm>
> #include <cstdio>
> using namespace std;
> typedef struct
> {
>     int x,y,len;
> }Node;
> 
> int n,k;
> Node road[100000];
> int father[100000];
> 
> int find(int x)
> {
>     while (father[x]!=x)
>     {
>         x=father[x];
>     }
>     return x;
> }
> 
> int cmp(Node a,Node b)
> {
>     return (a.len<b.len);
> }
> 
> long long  Kruskal()
> {
>     int a,b,count;
>     long long sum=0;
>     sort(road+1,road+1+k,cmp);
>     for (int i=1;i<=n;i++) father[i]=i;
>     for (int i=1;i<=k;i++)
>     {
>         if (road[i].x==road[i].y) continue;
>         a=find(road[i].x);
>         b=find(road[i].y);
>         if (a!=b)
>         {
>             sum+=road[i].len;
>             father[b]=a;
>             count++;
>         }
>         if (count==n-1) break;
>     }
>     return sum;
> }
> 
> int main()
> {
>     while (scanf("%d",&n)!=EOF)
>     {
>         int tmp;
>         k=1;
>         for (int i=1;i<=n;i++)
>         {
>             for (int j=1;j<=n;j++)
>             {
>                 scanf("%d",&tmp);
>                 road[k].x=i;
>                 road[k].y=j;
>                 road[k].len=tmp;
>                 k++;
>             }
>         }
>         cout<<Kruskal()<<endl;
>     }
>     return 0;
> }

Followed by:

Post your reply here:
User ID:
Password:
Title:

Content:

Home Page   Go Back  To top


All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator