zoukankan      html  css  js  c++  java
  • bzoj3651&3081: 网络通信

    3651: 网络通信

    Time Limit: 10 Sec  Memory Limit: 256 MB
    Submit: 50  Solved: 37
    [Submit][Status][Discuss]

    Description

       有一个由M 条电缆连接的 N 个站点组成的网络。为了防止垄断,由 C 个公司控制所有的电缆,规定任何公司不能控制连接同一个站点的两条以上的电缆(可以控制两条)。同时规定,每个公司不能有多余的电缆,所谓的多余,是指属于同一个公司的电缆不能形成环。  
    在运作过程中,不同公司之间会进行电缆买卖。请你写一个程序判断买卖是否合法。 

    Input


    输入第一行有4个由空格隔开的整数 N,M,C和 T。N(1≤N≤ 8 000)表示站点数,M(0≤M≤100 000)表示连接站点的电缆数。C(1≤C≤ 100)表表示公司数量,T 表示电缆买卖次
    数。后面有M行,每行三个整数Sj1,Sj2和Kj,表示连接站点Sj1和Sj2(1≤Sj1< Sj2  ≤ n)的电缆属于Kj(1≤Kj≤C)公司拥有,任意两个站点只有一条直接相连的电缆,输入状态合法。最后T(0≤T≤100 000)行,每行三个整数 Si1, Si2和  Ki,表示 Ki公司想购买站点Si1和Si2之间的电缆。 

    Output


    输出共 T行,表示处理的结果,有以下几种可能的结果: 
    1、“No such cable.”  两个站点间没有电缆。 
    2、 “Already owned.”  电缆己经是 Ki 公司控制。 
    3、 “Forbidden: monopoly.” Ki 公司己经控制了两条连接 Si1  或  Si2 的电缆。 
    4、 “Forbidden: redundant.” Ki 公司控制的线路会出现环。 
    5、 “Sold.”  可以买卖。

    Sample Input

    4 5 3 5
    1 2 1
    2 3 1
    3 4 2
    1 4 2
    1 3 3
    1 2 3
    1 2 3
    1 4 3
    2 3 3
    2 4 3

    Sample Output

    Sold.
    Already owned.
    Forbidden: monopoly.
    Forbidden: redundant.
    No such cable.

    HINT


    题意有点长,直接贴了。。。
    思路:首先对于每个公司分别建一棵动态树,把每条边hash一下,分情况做。
    对于第一种情况,在hash里找一遍即可。
    对于第二种情况,在hash里找到这条边,看之前拥有的公司与现在是否相同。
    对于第三种情况,记录每个公司对于每个点拥有几条边,就是度数,如果交易前度数已经为2,则交易失败。
    对于第四种情况,在该公司的动态树中判断要连的两点是否在同一个连通块中,是则交易失败。
    对于第五种情况,交易成功,在hash中修改,在原公司的动态树中删去原边,在新公司的动态树中加去新边,交易成功。

  • 相关阅读:
    python eval() 进行条件匹配
    spring boot 学习
    JAVA基础
    在mac上进行JAVA开发
    移动端开发基础【8】页面生命周期
    数据挖掘【1】概述(引言)
    项目管理【26】 | 项目成本管理-规划成本管理
    项目管理【24】 | 项目进度管理-控制进度
    项目管理【25】 | 项目成本管理-成本管理概念
    操作系统【8】 Linux虚拟内存和物理内存
  • 原文地址:https://www.cnblogs.com/thythy/p/5493593.html
Copyright © 2011-2022 走看看