70分,3个点TLE,求大佬改进一下,谢谢!!

P3366 【模板】最小生成树

#include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include <vector> #include <cmath> #include <ctime> #include <set> #include <map> #define INF 1e9+9 using namespace std; int n,m,tot,s[5050],a,b,c,sum,vis[5050],ans; struct KARL_AC{ int out; int v[5050]; int edge[5050]; }u[5050]; void work(){ int Min=INF; int Minp; int p=0; for(int i=1;i<=tot;i++){ for(int j=1;j<=u[s[i]].out;j++){ if(vis[u[s[i]].v[j]]!=1&&u[s[i]].edge[j]<Min){ Minp=u[s[i]].v[j]; Min=u[s[i]].edge[j]; if(p==0){ p=1; sum++; } } } } vis[Minp]=1; tot++; s[tot]=Minp; ans+=Min; return ; } int main(){ //freopen(".in","r",stdin); //freopen(".out","w",stdout); scanf("%d%d",&n,&m); for(int i=1;i<=m;i++){ scanf("%d%d%d",&a,&b,&c); u[a].out++; u[a].v[u[a].out]=b; u[a].edge[u[a].out]=c; u[b].out++; u[b].v[u[b].out]=a; u[b].edge[u[b].out]=c; } sum++; tot++; s[tot]=1; vis[1]=1; for(int i=1;i<n;i++){ work(); } if(sum<n){ printf("orz\n"); } else{ printf("%d\n",ans); } return 0; }
by karl @ 2018-09-17 19:56:24


希望更丰富的展现?使用Markdown
by cecilia_sankta @ 2018-09-17 19:58:47


希望更丰富的展现?使用Markdown
by decoqwq @ 2018-09-17 20:02:49


希望更丰富的展现?使用Markdown
by Wisbtsml @ 2018-09-17 20:05:13


@[karl](/space/show?uid=29866) 没有路径压缩吧
by Carbon @ 2018-09-19 08:57:28


希望更丰富的展现?请避免使用Markdown
by L1ttel_Y @ 2018-10-05 15:09:04


希望更丰富的展现?使用Markdown
by tong_xz @ 2018-10-20 20:52:38


|