先把水泥路建生成树,然后加鹅卵石路,这里加的鹅卵石路是一定要用的(连接各个联通块),然后初始化并查集,先把必需的鹅卵石路加进去,然后随便加鹅卵石路直到k条,然后加水泥路即可。
注意判断无解#include#include using namespace std;const int N=20005,M=100005;int n,m,k,f[N],ta,tb,con;bool v[M];struct qwe{ int u,v; qwe(int U=0,int V=0) { u=U,v=V; }}a[M],b[M],ans[N];int read(){ int r=0,f=1; char p=getchar(); while(p>'9'||p<'0') { if(p=='-') f=-1; p=getchar(); } while(p>='0'&&p<='9') { r=r*10+p-48; p=getchar(); } return r*f;}int zhao(int x){ return f[x]==x?x:f[x]=zhao(f[x]);}int main(){ n=read(),m=read(),k=read(); for(int i=1;i<=m;i++) { int x=read(),y=read(),z=read(); if(z) a[++ta]=qwe(x,y); else b[++tb]=qwe(x,y); } if(tb