zoukankan      html  css  js  c++  java
  • 【UOJ 121】Hzwer的陨石

    【题目描述】:

    经过不懈的努力,Hzwer召唤了很多陨石。已知Hzwer的地图上共有n个区域,且一开始的时候第i个陨石掉在了第i个区域。有电力喷射背包的ndsf很自豪,他认为搬陨石很容易,所以他将一些区域的陨石全搬到了另外一些区域。

    在ndsf愉快的搬运过程中,Hzwer想知道一些陨石的信息。对于Hzwer询问的每个陨石i,你必须告诉他,在当前这个时候,i号陨石在所在区域x、x区域共有的陨石数y、以及i号陨石被搬运的次数z。

    【输入描述】:

    输入的第一行是一个正整数T。表示有多少组输入数据。

    接下来共有T组数据,对于每组数据,第一行包含两个整数:N和Q。

    接下来Q行,每行表示一次搬运或一次询问,格式如下:

    T A B:表示搬运,即将所有在A号球所在地区的陨石都搬到B号球所在地区去。

    Q A:Hzwer想知道A号陨石的x,y,z。

    【输出描述】:

    对于第i组数据,第一行输出“Case i:”接下来输出每一个询问操作的x,y,z,每一个询问操作的答案占一行。每组数据之间没有空行。

    【样例输入】:

    2
    3 3
    T 1 2
    T 3 2
    Q 2
    3 4
    T 1 2
    Q 1
    T 1 3
    Q 1

    【样例输出】:

    Case 1:
    2 3 0
    Case 2:
    2 2 1
    3 3 2

    【时间限制、数据范围及描述】:

    时间:1s 空间:128M

    20%的数据保证:0<=T<=20,2<N<=100,2<Q<=100。

    100%的数据保证:0<=T<=100,2<N<=10000,2<Q<=10000。

    对于所有数据保证搬运操作中AB在N的范围内且所在区域不相同。

    题解:带权并查集,暴力90分,数据确实水的可以(壁纸姚琛真帅我爱了

    #include<cstdio>
    #include<iostream>
    #include<cmath>
    #include<cstdlib>
    #include<cstring>
    #include<algorithm>
    #include<bits/stdc++.h>
    typedef long long ll;
    const int N=10003;
    using namespace std;
    int n,m,T,f[N],x,y;
    char c;
    struct node{
        int now;//现在位置 
        int tot;//搬运几次 
    }a[N];
    
    void QGhappy(){
        for(int i=1;i<=n;i++) 
            { a[i].now=i; a[i].tot=0; }
        for(int i=1;i<=n;i++) f[i]=1;
    }
    
    void work1(){
        scanf("%d %d",&x,&y);
        int xx=a[x].now;
        int yy=a[y].now;
        for(int i=1;i<=n;i++){
            if(a[i].now==xx){
                a[i].now=yy;
                a[i].tot++;
            }
        }
        f[yy]+=f[xx]; f[xx]=0;
    }
    
    void work2(){
        int i; scanf("%d",&i);
        printf("%d %d %d
    ",a[i].now,f[a[i].now],a[i].tot);
    }
    
    int main(){
        freopen("meteorite.in","r",stdin);
        freopen("meteorite.out","w",stdout); 
        scanf("%d",&T);
        for(int yc=1;yc<=T;yc++){
            printf("Case %d:
    ",yc);
            scanf("%d %d",&n,&m);
            QGhappy(); //cout<<a[2].now;
            for(int i=1;i<=m;i++){
                cin>>c;
                if(c=='T') work1();
                else work2();
            }
        }
        return 0;
    }
  • 相关阅读:
    第三套三
    多线程读写共享变量时,synchronized与volatile的作用
    jQuery源代码学习笔记:构造jQuery对象
    写入位置时发生訪问冲突
    Free Editor
    大区间素数筛选 POJ2689
    HDU
    CentOS下挂载U盘
    得到当前堆栈信息的两种方式(Thread和Throwable)的纠结
    [实战]MVC5+EF6+MySql企业网盘实战(9)——编辑文件名
  • 原文地址:https://www.cnblogs.com/wuhu-JJJ/p/13767807.html
Copyright © 2011-2022 走看看