Corporative Network UVA

来源:互联网 发布:网络世界边锋游戏 编辑:程序博客网 时间:2024/06/04 00:22

可能是数据水点,,直接查找都不会错
f [ i ] 代表 i 的 父结点, d [ i ] 表示 i 到 父结点的距离,每次进行查找

下篇博文 给出 压缩路径的做法,,耗时比较少,可应对更大数据量

#include <iostream>#include <cstdio>#include <cstdlib>#include <cstring>#include <cmath>#include <set>#include <map>#include <stack>#include <queue>#include <ctype.h>#include <vector>#include <algorithm>#define in freopen("in.txt", "r", stdin)#define out freopen("out.txt", "w", stdout)// cout << "  ===  " << endl;using namespace std;typedef long long ll;const int maxn = 20000 + 7, INF = 0x3f3f3f3f, mod = 1000; int T, n, ans;int f[maxn], d[maxn];void find_(int id) {    if(id == f[id]) return ;    ans += d[id];    find_(f[id]);}void solve() {    char c;    while(scanf("%c", &c)) {        if(c == 'O') return;        if(c == 'E') {            int id;            scanf("%d", &id); //st.insert(id);            ans = 0;            find_(id);            printf("%d\n", ans);        }        else if(c == 'I') {            int a_, b_;            scanf("%d %d", &a_, &b_);            f[a_] = b_;            d[a_] = abs(a_-b_) % mod;        }    }}int main() {    scanf("%d", &T);    while(T--) {        scanf("%d", &n);        for(int i = 0; i <= n; ++i)            f[i] = i, d[i] = 0;        solve();    }    return 0;}
原创粉丝点击