当前位置: 首页 > news >正文

P6004

USACO 2020 Jan 银组 T3 Wormhole Sort

link

题意

给定 \(n\) 的一个排列 \(p\),有 \(m\) 个传送门可以交换 \(x_i,y_i\) 处的两个数,分数为 \(w_i\)。求使得 \(p\) 有序的最小分数的最大值。\(n,m\leq 10^5,x_i,y_i\leq n,w_i\leq 10^9\).

题解

观察到一个传送门只要使用就可以无限使用,考虑并查集,一个集合内可以互相换。还有一个性质就是当一个传送门使用了,那么分数比它大的都可以使用。可以二分分界点,当然也可以枚举。但是不用每次都挨个枚举,前面的能满足条件后面加多少传送门它还是满足条件。复杂度 \(O(n\log n)\),瓶颈在排序。aclink。

  • 记得判 -1

代码

#include<bits/stdc++.h>
#define i64 long long
#define L(a,b,c,d) for(int a=b;a<=c;a+=d)
#define R(a,b,c,d) for(int a=b;a>=c;a-=d)using namespace std;
const int N=1e5+5;void solve();
int n,m,a[N],fa[N];
struct wor{int x,y,z;bool operator< (wor A){return z>A.z;}
} w[N];signed main(){int Test=1;
//  scanf("%d",&Test);while(Test--) solve();return 0;
}int find(int x){if(x==fa[x]) return x;fa[x]=find(fa[x]);return fa[x];
}void solve(){scanf("%d%d",&n,&m);bool ok=0;L(i,1,n,1){scanf("%d",a+i);if(i!=a[i]) ok=1;fa[i]=i;}L(i,1,m,1){scanf("%d%d%d",&w[i].x,&w[i].y,&w[i].z);}if(!ok){printf("-1\n");return;}sort(w+1,w+m+1);int j=1;L(i,1,m,1){int fx=find(w[i].x),fy=find(w[i].y);if(fx!=fy){fa[fx]=fy;}while(find(j)==find(a[j])){j++;if(j>n){printf("%d\n",w[i].z);return;}}}
}
http://www.sczhlp.com/news/36677/

相关文章:

  • Python入门学习(十)第十四章其他
  • NSSCTF 4th OnePanda战队 wp
  • 办公用品网站建设网站怎么找
  • 南充做网站 www.xinbay.comsem竞价代运营公司
  • 中国建设银行网站首页nba最新新闻
  • wordpress 访问量统计seo的理解
  • 做刷机网站赚钱吗免费网站在线客服系统源码
  • 视频号广告推广黑龙seo网站优化
  • 濮阳网络教育抖音搜索seo
  • dede新闻网站源码超链接友情外链查询
  • 宁德网站开发公司网页设计大作业
  • C# Avalonia 10- WindowResource
  • MySQL 索引详解
  • 犀牛云网站怎么建设电话营销技巧和营销方法
  • 苏州网站建设情况免费做网站网站的软件
  • 做网站 图片是文本营销必备十大软件
  • 临沂市网站建设公司韶关seo
  • 用cms做网站怎么样东莞做网站哪里好
  • 网站建设优秀网专业推广引流团队
  • 怎么做网站识图验证码前端性能优化
  • 成都最近的流行病毒沈阳专业seo
  • 酒店电子商务网站建设网站搜索引擎拓客
  • 江门做公司网站网站建设及网络推广
  • VTK开发笔记(二):Qt5.9.3+VS2017x64+VTK8.2创建兼容dll和嵌入源码窗口两种方式的Qt嵌入VTK8.2模板Demo
  • 网站设计建设公司教程google搜索网址
  • 厦门做网站公司有哪些沈阳疫情最新消息
  • wordpress淘宝客主题山东网络优化公司排名
  • AtCoder Beginner Contest 420记录
  • 擅自给公司做网站有什么责任广州白云区疫情实时动态
  • 建设自己的网站企点下载