20prim求调

P1547 [USACO05MAR] Out of Hay S

@[Isaac_D6](/user/760391) 1.memset 赋值是按字节赋值,并不是将元素直接赋值为你传进去的第二个元素,例如写 memset(a,0x3f,sizeof(a)),a 中的元素会被赋值为 0x3f3f3f3f(0x3f=63,0x3f3f3f3f=2e9)。如果你传 2147483647 进去的话结果可能和你想要达成的目标不一样
by bugmaker3243 @ 2024-01-18 20:46:00


@[Isaac_D6](/user/760391) 80pts ```cpp #include<iostream> #include<cstring> #include<cmath> #include<cstdio> #include<algorithm> using namespace std; const int maxn=100000; const int inf=2147483647; struct edge{ int w,to,next; }e[maxn*2]; int cnt,n,dis[maxn],tot,head[maxn],m; bool vis[maxn]; void add(int u,int v,int w) { e[++tot].to=v; e[tot].w=w; e[tot].next=head[u]; head[u]=tot; } int prim(){ int u,v,ans=0; for(int i = 0; i < maxn-1; i++) dis[i] = inf; memset(vis,0,sizeof(vis)); vis[1]=true;dis[1]=0; for(int i=head[1];i;i=e[i].next){ int v=e[i].to;dis[v]=e[i].w; } for(int i=1;i<n;i++) { int miw=inf,minid; for(int i=1;i<=n;i++) { if(!vis[i]&&miw>dis[i]){ miw=dis[i];minid=i; } } vis[minid]=true; ans=max(miw,ans); for(int i=head[minid];i;i=e[i].next) { int v=e[i].to; if(!vis[i]&&dis[v]>e[i].w) dis[v]=e[i].w; } } return ans; } signed main() { // freopen("1.in","r",stdin); // freopen("1.ans","w",stdout); int x,y,z; cin>>n>>m; for(int i=1;i<=m;i++) { cin>>x>>y>>z; add(x,y,z); add(y,x,z); } cout<<prim(); return 0; } ```
by ragwort @ 2024-01-18 20:52:44


此帖结,因为for中的for还是用的i导致冲突了 谢谢大家啦,~~真是给我笑拥了~~
by Isaac_D6 @ 2024-01-18 21:15:45


|