bnu 33684 Never Wait for Weights (权值并查集)

原创 2013年12月04日 12:24:13

Bnu33684Never Wait for Weights

注意:种类并查集要取模,注意有减法时,+MOD

#pragma comment(linker, "/STACK:1024000000,1024000000")
#include <cstdio>
#include <ctime>
#include <cstdlib>
#include <cstring>
#include <queue>
#include <string>
#include <set>
#include <stack>
#include <map>
#include <cmath>
#include <vector>
#include <iostream>
#include <algorithm>
using namespace std;

#define FE(i, a, b) for(int i = (a); i <= (b); ++i)
#define FD(i, b, a) for(int i = (b); i >= (a); --i)
#define REP(i, N) for(int i = 0; i < (N); ++i)
#define CLR(a, v) memset(a, v, sizeof(a))
#define PB push_back
#define MP make_pair

#define RI(n) scanf("%d", &n)
#define RIII(a, b, c) scanf("%d%d%d",&a, &b, &c)

typedef long long LL;
const double eps = 1e-10;
const int maxn = 1000010;

int fa[maxn], dis[maxn];

int findset(int x)
{
    if (x != fa[x])
    {
        int fax = fa[x];
        fa[x] = findset(fa[x]);
        dis[x] += dis[fax];
    }
    return fa[x];
}

void Merge(int x, int y, int z)
{
    int fax = findset(x);
    int fay = findset(y);
    if (fax == fay) return ;
    fa[fax] = fay;
    dis[fax] = dis[y] - dis[x] - z;
}

int main()
{
    int n, m;
    char op;
    int x, y, z;
    while (cin >> n >> m && n + m)
    {
        for (int i = 0; i <= n; i++)
            fa[i] = i, dis[i] = 0;
        while (m--)
        {
            scanf(" %c%d%d", &op, &x, &y);
            if (op == '!')
            {
                scanf("%d", &z);
                Merge(x, y, z);
            }
            else
            {
                int fax = findset(x);
                int fay = findset(y);
                if (fax != fay) puts("UNKNOWN");
                else printf("%d\n", dis[y] - dis[x]);
            }
        }
    }
}


bzoj 4690: Never Wait for Weights (加权并查集)

4690: Never Wait for Weights Time Limit: 15 Sec  Memory Limit: 256 MB Submit: 302  Solved: 139 [Subm...
  • clover_hxy
  • clover_hxy
  • 2016年12月14日 20:34
  • 219

Never Wait for Weights

Never Wait for Weights In a laboratory, an assistant, Nathan Wada, is measuring weight diff...
  • qq415200973
  • qq415200973
  • 2013年08月12日 14:37
  • 682

BZOJ4690 Never Wait for Weights

第一反应是LCT什么鬼……我是不是没救了 然后看了一眼AC代码长度,瞬间发现自己是傻逼…… 拿带权并查集维护就行了,每个点维护一下自己比自己的爹青多少,连边和路径压缩的时候更新一下即可 #inc...
  • neither_nor
  • neither_nor
  • 2016年08月29日 08:06
  • 595

4690: Never Wait for Weights

Description 在实验室中,Nathan Wada作为助手的职责是测定两个样品的重量差异。当样品的差异很小时,使用天平能比使用 弹簧秤得到更精确的结果,所以他只使用天平来测得一些样品的...
  • cx_lzx
  • cx_lzx
  • 2017年10月06日 10:00
  • 92

Never Wait for Weights(带权并查集)

题意:遇到   !a b w 表示 b比a 重w,遇到? a b 表示输出a与b的w 的差值 #include #include #include #include #include #de...
  • yz467796454
  • yz467796454
  • 2017年10月23日 18:55
  • 46

[bzoj4690]Never Wait for Weights

题目大意一堆未知数,之间有权值关系如x-y=z 每次给出关系或询问两个未知数的差权值并查集关系的维护显然用并查集。 每个节点维护如果父亲权值为0我的权值应该是多少即可。#include #incl...
  • WerKeyTom_FTD
  • WerKeyTom_FTD
  • 2016年11月09日 21:56
  • 239

HYSBZ 4690 Never Wait for Weights(变种并查集)

在实验室中,Nathan Wada作为助手的职责是测定两个样品的重量差异。当样品的差异很小时,使用天平能比使用 弹簧秤得到更精确的结果,所以他只使用天平来测得一些样品的重量差。他偶尔会被询问一些样品的...
  • qq_37497322
  • qq_37497322
  • 2017年12月03日 22:52
  • 84

UVALive 6187 Never Wait for Weights(并查集)

题意:每次给出每两个数之间的大小差值。在给出关系的过程中插入询问:数a和数b的差值,若不能确定,输出UNKNOWN 解法:相对大小关系的处理:并查集 1.给出两点的相对大小关系后,找到两个点的根节...
  • u013514182
  • u013514182
  • 2015年05月14日 00:49
  • 267

BZOJ[4690]Never Wait for Weights 加权并查集

题目链接http://www.lydsy.com/JudgeOnline/problem.php?id=4690 Description在实验室中,Nathan Wada作为助手的职责是测定两个样品...
  • WADuan2
  • WADuan2
  • 2017年08月21日 11:43
  • 389

【BZOJ】4690 Never Wait for Weights

【BZOJ】4690 Never Wait for Weights Description在实验室中,Nathan Wada作为助手的职责是测定两个样品的重量差异。当样品的差异很小时,使用天平能比使用...
  • Pure_W
  • Pure_W
  • 2016年09月01日 17:13
  • 526
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:bnu 33684 Never Wait for Weights (权值并查集)
举报原因:
原因补充:

(最多只允许输入30个字)