前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >POJ3723 《挑战程序设计竞赛》踩坑

POJ3723 《挑战程序设计竞赛》踩坑

作者头像
kalifa_lau
发布2018-04-28 14:38:28
6700
发布2018-04-28 14:38:28
举报
文章被收录于专栏:kalifaの日々

我看书上的代码,觉得这一行有错误,

代码语言:javascript
复制
//这里为什么要加上女生的人数而不是男生的人数?我认为应该加男生的人数
 es[j].v = v+N;

所以我就没这样写,我写的是

代码语言:javascript
复制
es[j].v = v+M;

在codeblocks运行的好好的,来了poj一直报错,debug两个多小时,终于发现,书里的题目和poj上的题目,x,y表示的正好相反啊啊啊啊啊啊啊!!!!!!!!! 书里说,(x,y,d)表示的是第x号男兵和第y号女兵的亲密度是d poj的原题说的是第x号女兵和第y号男兵的亲密度是d!!!


好了 容我歇会儿 附上AC的源码

代码语言:javascript
复制
#include <cstdio>
#include <algorithm>
#define MAX 10000
using namespace std;

int par[MAX*2];
int height[MAX*2];
int N,M,R;


void init_union_find(int v)
{
    for(int i=0;i<v;i++)
    {
        par[i]=i;
    }
    fill(height,height+v,0);
}
int  find_root(int x)
{
    if(par[x]==x)
    {
        return x;
    }
    return find_root(par[x]);
}
void unite(int x,int y)
{
    x = find_root(x);
    y = find_root(y);
    if(x==y)
    {
        return;
    }

    if(height[x]>height[y])
    {
        par[y]=x;
    }
    else
    {
        par[x]=y;
        if(height[x]==height[y])
        {
            height[y]++;
        }
    }
}
bool same(int x,int y)
{
    return find_root(x)==find_root(y);
}


struct edge {
    int u,v,cost;
};

bool comp(const edge& e1,const edge& e2)
{
    return e1.cost<e2.cost;
}
edge es[MAX*5];



int kruskal()
{
    sort(es,es+R,comp);
    init_union_find(N+M);
    int res = 0;
    for(int i=0;i<R;i++)
    {
        edge e = es[i];
        //printf("edge e :%d %d %d",es[i].u,es[i].v,es[i].cost);
        if(!same(e.u,e.v))
        {
            unite(e.u,e.v);
            res += e.cost;
        }
    }
    return res;
}

int main()
{
    int loop;
    scanf("%d",&loop);
    int u,v,cost;
    for(int i=0;i<loop;i++)
    {
        scanf("%d%d%d",&N,&M,&R);
        for(int j=0;j<R;j++)
        {
            scanf("%d%d%d",&u,&v,&cost);
            es[j].cost = -cost;
            es[j].u = u;
            //这里为什么要加上女生的人数而不是男生的人数?我认为应该加男生的人数
            es[j].v = v+N;
        }
        printf("%d\n",(N+M)*MAX+kruskal());
    }
    return 0;
}

AC万岁,过啥圣诞,要啥自行车。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.12.25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档