某某年某某月某某日(其实是我忘了) 在月黑风高的早上,LLYY睁开了双眼,发现周边的环境发生了翻天覆地的变化——他竟然不在宿舍里!!!但是他,是LLYY!他用他那聪明的脑子想了亿想,今天是周六!! LLYY长脑子了!!!
1145145年11月123-100+1-10+9日点击查看日期 在万里无云、晴空万里的midnight(午夜),LLYY又醒了!!,但是LLYY其实是为了修改他WA掉的代码,代码如下:
#include<bits/stdc++.h>
using namespace std;
int n,m,x[100005],p[100005],ans,k,pp,u,v,w,num;
struct stu{
int x,y,z;
}a[200005];
bool cmp(stu a,stu b)
{
return a.z<b.z;
}
int getfather(int x)
{
if(p[x]==x)return x;
p[x]=getfather(p[x]);
return p[x];
}
void kruskal()
{
for(int i=1;i<=n;i++) p[i]=i;
for(int i=1;i<=m;i++)
{
int f1=getfather(a[i].x);
int f2=getfather(a[i].y);
if(f1!=f2)
{
ans+=a[i].z;
p[f1]=f2;
}
}
}
int main(){
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>pp;
if(pp==1)
{
cin>>u>>v>>w;
int f1=getfather(u);
int f2=getfather(v);
if(f1!=f2)
{
ans+=w;
p[f1]=f2;
}
}
else cin>>a[++num].x>>a[++num].y>>a[++num].z;
}
sort(a+1,a+num+1,cmp);
for(int i=1;i<=num;i++) cout<<a[i].x<<" "<<a[i].y<<" "<<a[i].z<<"\n";
kruskal();
cout<<ans;
return 0;
}
/*
5 6
1 1 2 1
1 2 3 1
1 3 4 1
1 4 1 1
2 2 5 10
2 2 5 5
*/
第7题 LLYY联络员
LLYY已经一岁了,网站也由最初的几个用户增加到了上万个用户,随着LLYY网站的逐步壮大,管理员的数目也越来越多,现在你身为LLYY管理层的联络员,希望你找到一些通信渠道,使得管理员两两都可以联络(直接或者是间接都可以)。LLYY是一个公益性的网站,没有过多的利润,所以你要尽可能的使费用少才可以。
目前你已经知道,LLYY的通信渠道分为两大类,一类是必选通信渠道,无论价格多少,你都需要把所有的都选择上;还有一类是选择性的通信渠道,你可以从中挑选一些作为最终管理员联络的通信渠道。数据保证给出的通行渠道可以让所有的管理员联通。
输入格式
第一行n,m表示LLYY一共有n个管理员,有m个通信渠道;
第二行到m+1行,每行四个非负整数,p,u,v,w 当p=1时,表示这个通信渠道为必选通信渠道;当p=2时,表示这个通信渠道为选择性通信渠道;u,v,w表示本条信息描述的是u,v管理员之间的通信渠道,u可以收到v的信息,v也可以收到u的信息,w表示费用。
输出格式
最小的通信费用。
输入/输出例子1
输入:
5 6 1 1 2 1 1 2 3 1 1 3 4 1 1 4 1 1 2 2 5 10 2 2 5 5
输出:
9
算了给你们分享一下做题网站(●'◡'●)