zoukankan      html  css  js  c++  java
  • [bzoj4151][AMPPZ2014]The Cave

    来自FallDream的博客,未经允许,请勿转载,谢谢。


    给定一棵有n个节点的树,相邻两点之间的距离为1。
    请找到一个点x,使其满足所有m条限制,其中第i条限制为dist(x,a[i])+dist(x,b[i])<=d[i]。
    n<=300000,m<=300000
     
    一个点如果满足题意,那么他和点1的距离至少为$max(0,frac{ai+bi-di}{2})$
    找出最大的那个点。如果有解,那么那个点肯定可以。暴力判断行不行就可以了。
    #include<iostream>
    #include<cstdio>
    #define MN 300000
    #define getchar() (*S++)
    char B[1<<26],*S=B;
    using namespace std;
    inline int read()
    {
        int x = 0; char ch = getchar();
        while(ch < '0' || ch > '9')  ch = getchar();
        while(ch >= '0' && ch <= '9'){x = x * 10 + ch - '0';ch = getchar();}
        return x;
    }
    int head[MN+5],n,m,cnt=0,dep[MN+5],a[MN+5],fa[MN+5],b[MN+5],d[MN+5];
    struct edge{int to,next;}e[MN*2+5];
    inline void ins(int f,int t)
    {
        e[++cnt]=(edge){t,head[f]};head[f]=cnt;
        e[++cnt]=(edge){f,head[t]};head[t]=cnt;
    }
    
    void Dfs(int x,int f)
    {
        fa[x]=f;
        for(int i=head[x];i;i=e[i].next)
            if(e[i].to!=f)
                dep[e[i].to]=dep[x]+1,Dfs(e[i].to,x);    
    }
    
    int main()
    {
        fread(B,1,1<<26,stdin); 
        for(int T=read();T;--T)
        {
            n=read();m=read();cnt=0;
            for(register int i=1;i<=n;++i) head[i]=0;
            for(register int i=1;i<n;++i) ins(read(),read());
            dep[1]=0;Dfs(1,0);int mx=0,From=1;
            for(register int i=1;i<=m;++i) 
                a[i]=read(),b[i]=read(),d[i]=read(),
                (dep[a[i]]+dep[b[i]]-d[i]+1)/2>mx?(mx=(dep[a[i]]+dep[b[i]]-d[i]+1)/2,From=i):0;
            for(From=a[From];dep[From]>mx;From=fa[From]);
            dep[From]=0;Dfs(From,0);bool flag=1;
            for(register int i=1;i<=m;++i) 
                if(dep[a[i]]+dep[b[i]]>d[i]) {flag=0;break;}
            if(flag) printf("TAK %d
    ",From);
            else puts("NIE");
        }
        return 0;
    }
  • 相关阅读:
    关于C 语言的字符串常量拼接
    网络处理器简介
    杨先生的博客目录(持续更新......)
    搭建json-server服务
    Spring boot + Mybatis + SQLite 搭建blog API
    使用json-server POST 数据结果只有id
    解决python查询数据库字段为decimal类型的数据结果为科学计数法的问题
    Maven仓库安装配置及使用
    Jekins发送Allure测试报告邮件
    Jenkins发送邮件配置
  • 原文地址:https://www.cnblogs.com/FallDream/p/bzoj4151.html
Copyright © 2011-2022 走看看