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

数据貌似

Posted by 10041112acmer at 2013-08-21 16:57:02 on Problem 3522
int cal(int l)
{
    for(int i = 0; i < n; ++i)
        father[i] = i;
    int i = l;
    int block_num = n;
    while(i < m && block_num > 1)
    {
        int a = getanc(edge[i].a);
        int b = getanc(edge[i].b);
        if(a != b)
        {
            block_num--;
            father[a] = b;
        }
        i++;
    }
    if(block_num > 1)
        return -1;
    return edge[i-1].w - edge[l].w;
}

void work()
{
    int ans = cal(0);
    if(ans == -1)
    {
        printf("-1\n");
        return;
    }
    for(int i = 1; i < m; ++i)
    {
        if(edge[i].w == edge[i-1].w)
            continue;
        int temp = cal(i);
        if(temp == -1)
            break;
        ans = min(ans, temp);
    }
    printf("%d\n", ans);
}

int main()
{
    while(scanf("%d%d", &n, &m), n|m)
    {
        mem(edge, 0);
        input();
        sort(edge, edge+m);
        work();
    }
}

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