布线问题(prime)

布线问题

时间限制:1000 ms  |  内存限制:65535 KB

难度:4

描述
南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件:
1、把所有的楼都供上电。
2、所用电线花费最少
输入
第一行是一个整数n表示有n组测试数据。(n<5)
每组测试数据的第一行是两个整数v,e.
v表示学校里楼的总个数(v<=500)
随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c<=100)。(哪两栋楼间如果没有指明花费,则表示这两栋楼直接连通需要费用太大或者不可能连通)
随后的1行里,有v个整数,其中第i个数表示从第i号楼接线到外界供电设施所需要的费用。( 0<e<v*(v-1)/2 )
(楼的编号从1开始),由于安全问题,只能选择一个楼连接到外界供电设备。
数据保证至少存在一种方案满足要求。
输出
每组测试数据输出一个正整数,表示铺设满足校长要求的线路的最小花费。
样例输入
1
4 6
1 2 10
2 3 10
3 1 10
1 4 1
2 4 1
3 4 1
1 3 5 6
样例输出
4

题解:只能选择一个楼连接到外界供电设备。刚开始没看到这句话,错了;

代码:

 1 #include<stdio.h>
 2 #include<string.h>
 3 const int MAXN=510;
 4 #define MIN(x,y)(x<y?x:y)
 5 const int INF=0x3f3f3f3f;
 6 int map[MAXN][MAXN];
 7 int low[MAXN],vis[MAXN];
 8 int ans;
 9 int out[MAXN];
10 //int usd[MAXN];
11 int N;
12 void prim(){
13     memset(vis,0,sizeof(vis));
14 //    memset(usd,0,sizeof(usd));
15     vis[1]=1;
16     for(int i=1;i<=N;i++)low[i]=map[1][i];
17     for(int i=1;i<=N;i++){
18         int temp=INF,k;
19         for(int j=1;j<=N;j++)
20             if(!vis[j]&&low[j]<temp)temp=low[k=j];
21             if(temp==INF)break;
22             //if(out[k]<temp)ans+=out[k],usd[k]=1;
23             //else
24             ans+=temp;
25             vis[k]=1;
26             for(int j=1;j<=N;j++)
27                 low[j]=MIN(low[j],map[k][j]);
28     }int temp=INF;
29     for(int i=1;i<=N;i++){
30         //if(usd[i])continue;
31         temp=MIN(temp,out[i]);
32     }
33     //if(temp==INF)temp=0;
34     printf("%d\n",ans+temp);
35 }
36 int main(){
37     int n,e,a,b,c;
38     scanf("%d",&n);
39     while(n--){
40         ans=0;
41         memset(map,INF,sizeof(map));
42         scanf("%d%d",&N,&e);
43         while(e--){
44             scanf("%d%d%d",&a,&b,&c);
45             if(c<map[a][b])map[a][b]=map[b][a]=c;
46         }
47         for(int i=1;i<=N;i++)scanf("%d",&out[i]);
48         prim();
49     }
50     return 0;
51 }

时间: 2024-10-11 13:07:14

布线问题(prime)的相关文章

NYOJ 布线问题

布线问题 时间限制:1000 ms  |  内存限制:65535 KB 难度:4 描述 南阳理工学院要进行用电线路改造,现在校长要求设计师设计出一种布线方式,该布线方式需要满足以下条件: 1.把所有的楼都供上电. 2.所用电线花费最少 输入 第一行是一个整数n表示有n组测试数据.(n<5) 每组测试数据的第一行是两个整数v,e. v表示学校里楼的总个数(v<=500) 随后的e行里,每行有三个整数a,b,c表示a与b之间如果建铺设线路花费为c(c<=100).(哪两栋楼间如果没有指明花费

Sicily 1444: Prime Path(BFS)

题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 1 #include<bits/stdc++.h> 2 using namespace std; 3 4 bool isPrime(int n){//素数判断 5 if(n == 2 || n == 3) return true; 6 else{ 7 int k = sqrt(n) + 1; 8 for(int i = 2; i < k; i

HDU 1389 继续畅通工程【最小生成树,Prime算法+Kruskal算法】

继续畅通工程 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 21871    Accepted Submission(s): 9356 Problem Description 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有直接的公路相连,只要能间接通过公路可达即可).现得到城镇道路统计表,表中列

HDU 1016 Prime Ring Problem(DFS)

题目链接 Problem Description A ring is compose of n circles as shown in diagram. Put natural number 1, 2, ..., n into each circle separately, and the sum of numbers in two adjacent circles should be a prime. Note: the number of first circle should always

PCB布线技巧

在进行布线之前,首选需要了解一下电路图,比如那些是信号线,那些电容有什么作用.电源需要走多宽. 1mm = 40ml 一般情况下1A的电流线宽选择1mm 最好将信号线表不同的颜色做特殊处理,保证信号的传输完整.走线的时候打开DRP走线,F4是打孔. 一般规则设置为5ml以上. 当移动原件的时候需要看线的走向可以如下图设置. 在布线的时候需要打孔设置过孔方法如下. 弹出如下对话框

[CareerCup] 7.7 The Number with Only Prime Factors 只有质数因子的数字

7.7 Design an algorithm to find the kth number such that the only prime factors are 3,5, and 7. 这道题跟之前LeetCode的那道Ugly Number II 丑陋数之二基本没有啥区别,具体讲解可参见那篇,代码如下: class Solution { public: int getKthMagicNumber(int k) { vector<int> res(1, 1); int i3 = 0, i

UVA 10200 Prime Time 暴力水题

一个简单的暴力水题,只是输出方式让人无语... #include <stdio.h> #include <string.h> int prime(int n) { int i; for(i=2;i*i<=n;i++) { if((n%i)==0) return 0; } return 1; } int main() { int num[10010]; int i; int a,b; int sum; memset(num,0,sizeof(num)); for(i=0;i&l

POJ 2689 Prime Distance(素数区间筛法--经典题)

大致题意:给定[L,R]区间,找出区间内的每个素数 数据范围 : 1<=L< R<=2,147,483,647) R-L <=1,000,000. R的数值太大,所以不能直接筛[0,R]的,要空间和时间优化,用到区间筛法,另外注意不能用int,因为R和L都是满int的,中间有很多细节处理会爆int的,还要注意1不是素数,所以在区间筛中要特判一下,是个易错的地方 //1160K 16MS C++ 1539B #include<cstdio> #include<ios

hdu 1016 Prime Ring Problem DFS解法 纪念我在杭电的第一百题

Prime Ring Problem Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 29577    Accepted Submission(s): 13188 Problem Description A ring is compose of n circles as shown in diagram. Put natural num