1004
来源:互联网 发布:淘宝改销量 编辑:程序博客网 时间:2024/05/20 21:48
二分 加 kruskal 结果错误 伤不起啊
# include<cstdio>
# include<algorithm>
# include<cstring>
# define maxe 100010
using namespace std;
int a[maxe],b[maxe],c[maxe];
int value[maxe],w[maxe],cc[maxe];
int n,m,r,sum=0;
int vis[10000],fa[10000];
int cmp1(const int a,const int b)
{
return value[a]<value[b];
}
int cmp2(const int a,const int b)
{
return c[a]<c[b];
}
int find(int x)
{
return fa[x]==x?x:fa[x]=find(fa[x]);
}
int test(int mv)
{
int num=2;
for(int i=0;i<m;i++)
{
int u=a[w[i]];
int v=b[w[i]];
if(find(u)!=find(v)&&c[w[i]]>=mv&&sum+value[w[i]]<=r)
{
if(!vis[u])
{
vis[u]=1;
num++;
}
if(!vis[v])
{
vis[v]=1;
num++;
}
u=fa[fa[v]];
sum+=value[w[i]];
}
}
if(num>=n&&sum<=r)
return 1;
return 0;
}
int main()
{
while(scanf("%d %d %d",&n,&m,&r)!=EOF)
{
int i,j,v,k=-1;
for(i=0;i<m;i++)
{
scanf("%d %d %d %d",&a[i],&b[i],&value[i],&c[i]);
w[i]=i;
cc[i]=i;
}
sort(w,w+m,cmp1);
sort(cc,cc+m,cmp2);
int l=0,r=m-1,mid;
while(l<=r)
{
mid=(l+r)/2;
sum=0;
for(i=0;i<n;i++)
fa[i]=i;
memset(vis,0,sizeof(vis));
sum+=value[cc[mid]];
vis[a[cc[mid]]]=1;
vis[b[cc[mid]]]=1;
fa[a[cc[mid]]]=b[cc[mid]];
if(test(c[cc[mid]]))
{
k=c[cc[mid]];
l=mid+1;
}
else
r=mid-1;
}
printf("%d\n",k);
}
return 0;
}
- [1004]
- 1004
- 1004
- 1004
- 1004
- 1004
- 1004
- 1004
- 1004
- 1004
- 1004
- 1004
- 1004
- 1004
- 1004
- 1004
- 1004
- 1004
- 关于 设置 无线打印机
- 黑马程序员_17 注解
- Hadoop集群(第5期)_Hadoop安装配置
- 写一个Singleton
- error LNK1123” 错误,终极解决方案
- 1004
- “单元测试要做多细?”
- Android动画之translate(位移动画)
- Spring环境下如何存取properties文件中的数值
- 十进制,八进制,十六进制在C语言当中的输出
- php 后台 PHPCMS 多语言网站解决方案
- Hadoop集群(第5期副刊)_JDK和SSH无密码配置
- 正则表达式及其应用
- 实型变量的定义和应用