zoukankan      html  css  js  c++  java
  • HDU3974

    题意

    给出(T)组数据,每组数据首先给出一个(n)

    接下去有(n-1)行数据,每行给出(x)(y),代表(x)的老板是(y)

    再给出一个(m),表示(m)次询问,每次询问如果是 (C)(x),表示输出(x)当前的任务;

    如果询问的是 (T)(x)(y),表示把(y)任务交给(x)

    思路

    这题可以用线段树写,也可以直接暴力(我用的暴力写法一直TLE),我用的是并查集写。

    AC代码

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    #include<stdio.h>
    #include<cmath>
    #include<list>
    #include<stdlib.h>
    #include<map>
    #include<stack>
    #include<stdio.h>
    #include<queue>
    using namespace std;
    typedef long long ll;
    #define sc(T) scanf("%d",&T)
    #define scc(x,y) scanf("%d %d",&x,&y)
    #define pr(T) printf("%d
    ",T)
    #define f(a,b,c) for (int a=b;a<c;a++)
    #define ff(a,b,c) for (int a=b;a>c;a--)
    #define inf 0x3f3f3f3f
    #define mem(a,b) memset(a,b,sizeof(a))
    #define eps 1e-9
    #define PI acos(-1)
    
    int f[50020];
    struct node
    {
        int job,time;
    } a[50020];
    
    int main()
    {
        int T,n,m,cas=1;
        sc(T);
        while(T--)
        {
            sc(n);
            int x,y,cnt=0;
            for(int i=1; i<=n; i++)
                f[i]=a[i].job=a[i].time=-1;
            for(int i=1; i<=n-1; i++)
            {
                scc(x,y);
                f[x]=y;
            }
            printf("Case #%d:
    ",cas++);
            sc(m);
            f(i,0,m)
            {
                char s;
                cin>>s;
                int x,y;
                if(s=='C') //询问x的当前任务
                {
                    cin>>x;
                    int y=a[x].job,t=a[x].time;
                    while(x!=-1)
                    {
                        if(a[x].time>t)
                            y=a[x].job,t=a[x].time;
                        x=f[x];
                    }
                    cout<<y<<endl;
                }
                else
                {
                    cin>>x>>y;
                    a[x].job=y;
                    a[x].time=++cnt;
                }
            }
        }
        return 0;
    }
    
  • 相关阅读:
    MVC 后台DataTable 前台遍历
    oracle 创建表空间详细介绍
    C# Chart 折线图 多条数据展示
    ASP.NET Request.QueryString 出现乱码问题
    生成XML文件
    什么是Intent(意图)
    HTTP错误405-Method Not Allowed
    通过剪切板传递数据—— 传递一个对象
    Linux下crontab命令的用法
    Redis使用介绍
  • 原文地址:https://www.cnblogs.com/OFSHK/p/13714297.html
Copyright © 2011-2022 走看看