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

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

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

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

es[j].v = v+M;

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


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

#include 
#include 
#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;iheight[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

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

你可能感兴趣的:(POJ3723 《挑战程序设计竞赛》踩坑)