POJ 3522 用不同的排序方式
2024-10-08 20:44:27
这是一个蜜汁WA了的代码。。
说好的样例对了就是对了呢orz
反正我个人认为思路是没问题的不知道WA在哪了,丢个坑在这里以后填吧
//思路:
//1节点连接的边都记录下来,依次克鲁斯卡尔枚举得出最小值。
//排序思路:将所有边按与枚举的边的差值排序。
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
const int inf = (<<)-;
const int maxn=1e2+;
struct qa
{
int u,v,w;
}q[];
int n,m;
int mf;
int f[maxn],p[maxn];
bool b[maxn];
inline bool cmp(const qa &a,const qa &b)
{
return abs(a.w-mf)<abs(b.w-mf);
}
inline int find1(int x)
{
return f[x]==x?x:f[x]=find1(f[x]);
}
int zx()//就是克鲁斯卡尔。。
{
int t=;
for(int i=;i<=n;i++)
f[i]=i;
int maxx=mf,minn=mf;
sort(q+,q+m+,cmp);
for(int i=;i<=m;i++)
{
int x=find1(q[i].u),y=find1(q[i].v);
if(x!=y)
{
f[x]=y;
maxx=max(maxx,q[i].w);
minn=min(minn,q[i].w);
t++;
}
if(t==n-)return maxx-minn;
}
return -;
}
int main()
{
while(scanf("%d%d",&n,&m),n||m){
int ans=;
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&q[i].u,&q[i].v,&q[i].w);
if(q[i].u==||q[i].v==)p[++ans]=q[i].w;
}
int minn=inf;
for(int i=;i<=ans;i++)
{
mf=p[i];
int mm=zx();
if(mm==-)continue;
minn=min(minn,mm);
}
if(minn!=inf)printf("%d\n",minn);
else printf("-1\n");
}
return ;
}
最新文章
- 【原】react中如何使用jquery插件
- 数据库的char(n)
- NSNumber和NSValue
- 单步调试 step into/step out/step over 区别
- js+css实现带缓冲效果右键弹出菜单
- asp.net上传Excel文件到服务端进行读取
- 读书笔记_Effective_C++_条款二十四: 若所有参数皆需类型转换,请为此采用non-member函数
- ssma for oracle
- js广告轮询效果
- 【BZOJ4571】美味(主席树)
- jQuery取得radio的值 取select得值
- .net core 获取不到session 和cookies的值
- jquery easyui datagrid mvc server端分页排序筛选的实现
- inheritPrototypal.js
- JavaScript学习(五)
- 初探AngularJs框架(一)
- 浅谈Java中static关键字、权限修饰符
- 【Fiddler学习】Fiddler抓包HTTPS请求和手机抓包
- usb_ctrl
- C语言从零开始(十四)-字符串处理