Tree
来源:互联网 发布:手机 惯性导航算法 编辑:程序博客网 时间:2024/04/19 20:37
Tree
Time Limit: 6000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1924 Accepted Submission(s): 563
Problem Description
There are N (2<=N<=600) cities,each has a value of happiness,we consider two cities A and B whose value of happiness are VA and VB,if VA is a prime number,or VB is a prime number or (VA+VB) is a prime number,then they can be connected.What's more,the cost to connecte two cities is Min(Min(VA , VB),|VA-VB|).
Now we want to connecte all the cities together,and make the cost minimal.
Now we want to connecte all the cities together,and make the cost minimal.
Input
The first will contain a integer t,followed by t cases.
Each case begin with a integer N,then N integer Vi(0<=Vi<=1000000).
Each case begin with a integer N,then N integer Vi(0<=Vi<=1000000).
Output
If the all cities can be connected together,output the minimal cost,otherwise output "-1";
Sample Input
251234544444
Sample Output
4-1
Author
Teddy
Source
2009浙江大学计算机研考复试(机试部分)——全真模拟
Recommend
lcy | We have carefully selected several similar problems for you: 2680 2677 2683 2678 2676
#include<stdio.h>#include<string.h>#include<stdlib.h>#define INF 0xfffffff#define min(a,b)(a>b?b:a)int map[1010][1010],p[1000010*2],mark[1010],num[1010];int n;void fun(){int i,j;p[1]=1;for(i=2;i<1000010*2;i++){if(!p[i]){for(j=i+i;j<1000010*2;j+=i){p[j]=1;}}}}int prim(){int sum=0,p=n,i,j;int flog;memset(mark,0,sizeof(mark));while(--p){int min=INF;for(i=2;i<=n;i++){if(!mark[i]&&map[1][i]<min){min=map[1][i];flog=i;}}if(min==INF)break;sum+=min;mark[flog]=1;for(j=2;j<=n;j++){if(!mark[j]&&map[1][j]>map[flog][j])map[1][j]=map[flog][j];}}if(p) return -1;else return sum;}int main(){int t;fun();scanf("%d",&t);while(t--){int i,j;scanf("%d",&n);for(i=1;i<=n;i++)scanf("%d",&num[i]);for(i=1;i<=n;i++)for(j=1;j<=n;j++)map[i][j]=INF;for(i=1;i<=n;i++){for(j=i+1;j<=n;j++){if(!p[num[i]]||!p[num[j]]||!p[num[i]+num[j]]){map[j][i]=map[i][j]=min(min(num[i],num[j]),abs(num[i]-num[j]));}}}/*for(i=1;i<=n;i++)for(j=1;j<=n;j++)printf("%d ",map[i][j]);*/printf("%d\n",prim());}return 0;}
0 0
- Tree
- tree
- tree
- TREE
- Tree
- Tree
- tree
- tree
- tree
- tree
- tree
- tree
- Tree
- Tree
- tree
- TREE
- tree
- tree
- 我的VIM配置(ubuntu)语法高亮 自动补全
- SQL Server 2008连接字符串写法大全
- Oracle EBS Interface/API(3)--采购订单审批
- UIView中常见的方法总结
- C++笔试总结-面试笔试常考题型(一)指针-引用-宏定义-sizeof
- Tree
- Random类和Math.radnom()方法的联系
- POJ 2431 Expedition(优先队列)
- HDU 3743 Frosh Week 【归并排序模板题】
- 20150812-Mapreduce笔记
- jquery Deferred 数组
- Service的使用(一)
- 在.gitignore中过滤不必要的文件
- 又见回文