做到的题目是 修路 修路成本 通过几个人认识
想到哪写到哪了
#include<bits/stdc++.h>
using namespace std;
int n;int cost;int num;
struct node
{int u,v,w;bool operator < (const node &it) const{return w<it.w;//顺序 }
}e[100];
int fa[100];
int find(int x)
{if(fa[x]==x) return x;return fa[x]=find(fa[x]);//记忆化搜索已经很好了 } void merge(int x,int y)//可再优化等我考完试再去学吧
{fa[find(x)]=find(y);
}int kru()
{sort(e,e+n);for(int i=0;i<n;i++){auto it=e[i];cost=0;num=0;int u=it.u;int v=it.v;int w=it.w;if(find(u)!=find(v)) {merge(u,v);cost+=w;num++;}}return num==n;//仅仅是在几个人认识的时候用到 已有边的不用
}
int main()
{cin>>n;memset(fa,0,sizeof(fa));for(int i=0;i<n;i++){int uu,vv,ww,ss;cin>>uu>>vv>>ww>>ss;e[i]={uu,vv,ww};//就是普通的结构体了 if(ss) merge(uu,vv);if(kru()) cout<<"yes"<<endl;else cout<<"no"<<endl;}
}