zoukankan      html  css  js  c++  java
  • [最小生成树] Jzoj P3237 间谍派遣

    Description

     你是M,一个雇佣N个标号为从1到N的间谍的情报机关的总管。每个间谍被派往不同的国家并在那获取重要情报。

     如下是你的任务:

        1.在部分间谍间组织会面。每次会面在两个间谍间进行,两个间谍交换他们自己获取的或从之前会面中得到的信息。因为在不同国家的两个间谍间组织机密会面很困难,所以每次秘密会面都有一个费用。

        2.当所有会面结束后,选择一部分间谍参加拯救世界的任务。一个间谍k参加此项任务需要花费Mk。很重要的一点是,任务要成功,必须满足参加任务的间谍获取的情报聚集到一起包含了其他剩余间谍所有的信息。

     请找出完成任务的最小花费,即组织会面和派遣间谍的费用之和。
     

    Input

    输入的第一行包含正整数N,表示间谍数目(2≤N≤1000)。

    接下来的N行包含N个不超过10^6的非负整数。在k行m列的数字表示间谍k和m间会面的花费,同样的,与m行k列的数字相等,k=m时数字为0。

    接下来的一行包含N个正整数Mk(1≤Mk≤10^6),分别为派遣间谍1,2,…,N参加任务的花费。

    Output

    只有一行,为所需的最小总费用。
     

    Sample Input

    输入1:
    3
    0 6 9
    6 0 4
    9 4 0
    7 7 7

    输入2:
    3
    0 17 20
    17 0 10
    20 10 0
    15 9 12

    输入3:
    5
    0 3 12 15 11
    3 0 14 3 20
    12 14 0 11 7
    15 3 11 0 15
    11 20 7 15 0
    5 10 10 10 10
     

    Sample Output

    输出1:
    17

    输出2:
    34

    输出3:
    28
     

    Data Constraint

    40%的数据满足N<=30且存在最多不超过4个间谍参加任务的最优方案;

    50%的数据满足派遣每个间谍参加任务的费用是一样的。
     

    Hint

    样例1:将会在1和2,接着2和3间谍间举行会面,然后送间谍2参与任务。

    样例2:将会在2和3间谍间举行会面,然后送间谍1和2参与任务。

    样例3:将会在2和4,接着1和2,接着3和5间谍间举行会面,然后送间谍1和3(或1和5)参与任务。

    题解

    • 水题一道,就是最小生成树就完了

    代码

     1 #include <cstdio>
     2 #include <iostream>
     3 #define ll long long     
     4 using namespace std;
     5 const int N=1010;
     6 int n,a[N][N],dis[N];
     7 bool vis[N];
     8 ll ans;
     9 int main()
    10 {
    11     scanf("%d",&n);
    12     for (int i=1;i<=n;i++) for (int j=1;j<=n;j++) scanf("%d",&a[i][j]);
    13     for (int i=1;i<=n;i++) scanf("%d",&dis[i]);
    14     for (int i=1;i<=n;i++)
    15     {
    16         int x=0;
    17         for (int j=1;j<=n;j++) if (!vis[j]&&(!x||dis[x]>dis[j])) x=j;
    18         ans+=dis[x],vis[x]=1;
    19         for (int j=1;j<=n;j++) if (!vis[j]&&dis[j]>a[x][j]) dis[j]=a[x][j];
    20     }
    21     printf("%lld",ans);
    22 }
  • 相关阅读:
    170325 第六章应用层 域名系统 DNS
    文件操作(Linux系统调用)
    进程优先级,进程nice值和%nice的解释
    常用的操作系统进程调度算法
    fork函数返回值问题
    进度条的实现
    find命令
    单链表的插入排序
    B树
    排序
  • 原文地址:https://www.cnblogs.com/Comfortable/p/11172004.html
Copyright © 2011-2022 走看看