首页 > 代码库 > ACM3371超时问题
ACM3371超时问题
这的确也是个大坑;
其实在这是到很简单的最小生成树的题目,但是数据量却很大;
用G++提交会超时,用C++不会超时,而且速度超快;
又长见识了。可惜长得不是做题的能力,而是知道它到底有多坑。
1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 const int N=600; 5 const int oo=11111111; 6 int map[N][N]; 7 int vis[N]; 8 int n,m,k; 9 int low[N];10 int prim(int s)11 {12 memset(vis,0,sizeof(vis));13 for(int i=1;i<=n;i++)14 low[i]=map[s][i];15 low[s]=0;16 vis[s]=1;17 int sum=0,v;18 for(int i=1;i<n;i++)19 {20 int Min=oo;21 for(int j=1;j<=n;j++)22 if(!vis[j]&&low[j]<Min)23 {24 Min=low[j];v=j;25 }26 if(Min==oo)return -1;27 sum+=Min;28 vis[v]=1;29 for(int j=1;j<=n;j++)30 {31 if(!vis[j]&&low[j]>map[j][v])32 low[j]=map[j][v];33 }34 }35 return sum;36 }37 int main()38 {39 int t;40 scanf("%d",&t);41 while(t--)42 {43 scanf("%d %d %d",&n,&m,&k);44 for(int i=1;i<=n;i++)45 for(int j=1;j<=n;j++)46 {47 map[i][j]=oo;48 }49 int a,b,c;50 for(int i=1;i<=m;i++)51 {52 scanf("%d %d %d",&a,&b,&c);53 if(map[a][b]>c)map[a][b]=map[b][a]=c;54 }55 int ct,room[N];56 for(int i=1;i<=k;i++)57 {58 scanf("%d",&ct);59 for(int j=1;j<=ct;j++)60 {61 scanf("%d",&room[j]);62 }63 for(int j=1;j<=ct;j++)64 for(int s=j+1;s<=ct;s++)65 {66 map[room[s]][room[j]]=map[room[j]][room[s]]=0;67 }68 }69 int result=prim(1);70 printf("%d\n",result);71 }72 return 0;73 }
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。