1 #include2 #include 3 #include 4 #define M 100008 5 using namespace std; 6 struct data 7 { 8 int u,v,w,c; 9 }e[M];10 int n,m,m1,u[M],w[M],v[M],c[M],tot,fa[M],ans1;11 bool cmp(data a,data b)12 {13 if(a.w==b.w)14 return a.c =m1;52 }53 int main()54 {55 scanf("%d%d%d",&n,&m,&m1);56 for(int i=1;i<=m;i++)57 {58 scanf("%d%d%d%d",&u[i],&v[i],&w[i],&c[i]);59 u[i]++;60 v[i]++;61 }62 int l=-102,r=102;63 for(;l<=r;)64 {65 int mid=(l+r)>>1; 66 if(ke(mid))67 {68 ans1=tot-mid*m1;69 l=mid+1;70 }71 else72 r=mid-1;73 }74 printf("%d",ans1);75 }
二分,给白色边加上的权值,看最小生成树中有多少白色的边。