讨论 / Prim怎么写。。。为啥写的不对
tsq0511 2016-09-23 07:47:23
点我顶贴 收藏 删除
#include<stdio.h>

#include<string.h>

int n,k,f[101][101],i,j,min[10001],x,y;

int totfirst=0,totend=0;

int pd[101];

int main(){

FILE *fin,*fout;

int k;

fin=fopen("net.in","r");

fout=fopen("net.out","w");

fscanf(fin,"%d%d",&n,&k);

memset(f,0x7f,sizeof(f));

memset(min,0x7f,sizeof(min));

memset(pd,1,sizeof(pd));

min[1]=0;

for(i=1;i<=n;i++){

fscanf(fin,"%d%d",&x,&y);

fscanf(fin,"%d",&f[x][y]);

totfirst+=f[x][y];

}

for(i=1;i<=n;i++){

k=0;

for(j=1;j<=n;j++)

if(pd[j]&&min[j]<min[k])

k=j;

pd[k]=0;

for(j=1;j<=n;j++){

if(pd[j]&&min[j]>f[k][j])

min[j]=f[k][j];

}

}

for(i=1;i<=n;i++)

totend+=min[i];

fprintf(fout,"%d %d %d\n",totfirst,totend,totfirst-totend);

for(i=1;i<=n;i++)

fprintf(fout,"%d ",min[i]);

fclose(fin);

fclose(fout);

return 0;

}

#1 15280850783@2018-08-21 02:20:42
回复 删除
#include<bits/stdc++.h>

using namespace std;

int n,k,f[101],sum,ans,s,t,cut;

struct node

{

int x,y,w;

}a[1001];

bool cmp(node a,node b)

{

return a.w <b.w;

}

int fa(int a)

{

if(f[a]!=a) f[a]=fa(f[a]);

return f[a];

}

void kruskal()

{

for(int i=1;i<=k;i++)

{

s=fa(a[i].x);

t=fa(a[i].y);

if(s==t) continue;

ans+=a[i].w ;

if(++cut==n-1) break;

f[s]=t;

}

}

int main()

{

ios::sync_with_stdio(false);

cin>>n>>k;

for(int i=1;i<=k;i++)

{

cin>>a[i].x>>a[i].y>>a[i].w;

sum+=a[i].w ;

}

sort(a+1,a+k+1,cmp);

/* for(int i=1;i<=k;i++)

cout<<a[i].x <<" "<<a[i].y <<" "<<a[i].w <<endl;*/

for(int i=1;i<=n;i++) f[i]=i;

kruskal();

cout<<sum-ans;

return 0;

}

查看更多回复
提交回复