标签:mini map class scan tle des 没有 -- style
2 5 1 2 3 4 5 4 4 4 4 4
4 -1
#include<stdio.h> #include<math.h> #include<string.h> #define INF 0x3f3f3f3f #define min(a,b) a<b?a:b int n,vis[601],map[601][601],dis[601],flag,sum,prim[1000010]; void fun(){ memset(prim,0,sizeof(prim)); for(int i=2;i<=1000010;i++) if(!prim[i]) for(int j=i*2;j<=1000010;j+=i) prim[j]=1; prim[1]=1; } void prime(){ memset(vis,0,sizeof(vis));//标记函数没有初始化。 int i; for(i=1;i<=n;i++) dis[i]=map[1][i]; vis[1]=1; flag=0; sum=0; for(i=1;i<n;i++){ int temp=INF,j,k; for(j=1;j<=n;j++) if(vis[j]==0&&dis[j]<temp) temp=dis[k=j]; if(temp==INF){ flag=1; break; } sum+=temp; vis[k]=1; for(j=1;j<=n;j++) if(vis[j]==0&&dis[j]>map[k][j]) dis[j]=map[k][j]; } } int main(){ int T,a[601]; scanf("%d",&T); while(T--){ memset(map,INF,sizeof(map)); scanf("%d",&n); fun(); for(int i=1;i<=n;i++) scanf("%d",&a[i]); for(int i=1;i<=n;i++) for(int j=i+1;j<=n;j++) if(!prim[a[i]]||!prim[a[j]]||!prim[a[j]+a[i]]){ int l=min(a[i],a[j]); int l2=min(l,abs(a[i]-a[j])); map[i][j]=map[j][i]=l2; } prime(); if(flag) printf("-1\n"); else printf("%d\n",sum); } return 0; }
标签:mini map class scan tle des 没有 -- style
原文地址:http://www.cnblogs.com/jhcelue/p/7131185.html