poj 2912

题目

和那道食物链的题目差不多。

公式的推导还是其他的情况

感觉做这一类权值的并查集,Union函数中的通过已知的东西对于路径的更新很重要

大部分和http://blog.csdn.net/hange_db/article/details/9529743#comments差不多

膜拜荡神

代码如下:

#include
#include
using namespace std;
#define N  505
#define M 2005

int pre[N],dis[N],a[M],b[M];
char op[M];

int find(int x)
{
    if(x==pre[x]) return x;
    int t=pre[x];
    pre[x]=find(pre[x]);
    dis[x]=(dis[x]+dis[t])%3;
    return pre[x];
}

void Union(int x,int y,int fx,int fy,int w)
{
    pre[fy]=fx;
    dis[fy]=(dis[x]-dis[y]+w+3)%3;//这公式,我只能说是别人推出来,我枚举验证了一边
}

int main()
{
    int i,j,n,m;
    while(~scanf("%d%d",&n,&m)){
        for(i=0;i') op[i]=1;
            if(op[i]=='<') op[i]=2;
        }
        int judge=-1,round=0;
        bool only=true;
        for(i=0;i


你可能感兴趣的:(ACM-数据结构,并查集)