蛋疼的G++,,不解释。不过最近看楼教主似乎提交的代码都是用G++的,,,,看来以后提交代码都用G++吧,,,,能提高水平。。。。。用prime算法过的,,,跑了900多ms,,,无语,,,求优化!
G++ac代码:
#include <iostream>
#include <string.h>
#include <algorithm>
using namespace std;
const int N=502;
//const int INF=0xfffffff;
#define INF 10005
int visted[N],map[N][N],key[N];
int n,sum;
void prime(){
memset(visted,0,sizeof(visted));
for(int i=1;i<=n;++i)
key[i]=map[1][i];
key[1]=0;visted[1]=1;
int temp,k;
sum=0;
for(int i=1;i<=n;++i){
temp=INF;
for(int j=1;j<=n;++j){
if(!visted[j]&&temp>key[j]){
temp=key[j];k=j;
}
}
if(temp==INF)
break;
//printf("temp===%d\n",temp);
visted[k]=1;
sum+=temp;
//printf("sum==%d\n",sum);
for(int j=1;j<=n;++j){
if(!visted[j]&&key[j]>map[k][j])
key[j]=map[k][j];
}
}
}
int main(){
int kk;
scanf("%d",&kk);
while(kk--){
int m,k;
memset(map,INF,sizeof(map));
scanf("%d%d%d",&n,&m,&k);
int a,b,c;
while(m--){
scanf("%d%d%d",&a,&b,&c);
if(c<map[a][b])
map[a][b]=map[b][a]=c;
}
int t,x,y;
while(k--){
scanf("%d",&t);
scanf("%d",&x);
t--;
while(t--){
scanf("%d",&y);
map[x][y]=map[y][x]=0;
}
}
prime();
int flag=1;
for(int i=1;i<=n;++i){
if(visted[i]==0){
flag=0;break;
}
}
if(flag)
printf("%d\n",sum);
else
printf("-1\n");
}
return 0;
}