MST系列
1.POJ2485 Highways
蛮水的 数组一开始开小了卡了一会儿 我可能是个傻逼
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<string>
using namespace std;
];
int find(int x){
return f[x]==x?x:f[x]=find(f[x]);
}
struct hh{
int x,y,z;
}s[];
bool comp(hh a,hh b){
return a.z<b.z;
}
int main(){
freopen ("1.in","r",stdin);
freopen ("1.out","w",stdout);
int T;
scanf("%d",&T);
while (T--){
memset(s,,sizeof(s));
;
scanf ("%d",&n);
;i<=n;++i)
;j<=n;++j){
f[(i-)*n+j]=(i-)*n+j;
int q;
scanf ("%d",&q);
if (i==j) continue;
k++;
s[k].x=i,s[k].y=j,s[k].z=q;
}
sort(s+,s+k+,comp);
,l=;
;i<=k;i++){
int e=find(s[i].x),g=find(s[i].y);
if (e!=g){
f[e]=g;
ans=max(ans,s[i].z);
l++;
) break;
}
}
printf("%d\n",ans);
}
;
}
2.POJ1679 The Unique MST
太傻逼了自己没打出来 参考blog:http://www.cnblogs.com/Howe-Young/p/4911992.html
顺带着也算是把次小生成树学完了 不过当晚打的时候愣是忘判vis了qwq绝望
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<string>
#define inf 0x7ffff
using namespace std;
int n,m;
][],vis[],dis[],mx[][],pre[],u[][];
int prim(){
;
;i<=n;++i) dis[i]=p[][i],pre[i]=;
vis[]=,pre[]=,dis[]=;
;i<=n;++i){
int md=inf,v;
;j<=n;++j)
if (!vis[j]&&dis[j]<md) md=dis[j],v=j;
;
u[pre[v]][v]=,u[v][pre[v]]=;
ans+=md,vis[v]=;
;j<=n;++j){
if (vis[j]) mx[v][j]=mx[j][v]=max(mx[j][pre[v]],dis[v]);
else if (!vis[j]&&dis[j]>p[v][j]) pre[j]=v,dis[j]=p[v][j];
}
}
return ans;
}
int sprim(int x){
int ans=inf;
;i<=n;++i)
;j<=n;++j)
if (!u[i][j]&&p[i][j]!=inf) ans=min(ans,x+p[i][j]-mx[i][j]);
;
return ans;
}
int main(){
freopen ("2.in","r",stdin);
freopen ("2.out","w",stdout);
int T;
scanf ("%d",&T);
while (T--){
memset(vis,,sizeof(vis));
memset(u,,sizeof(u));
memset(mx,,sizeof(mx));
scanf ("%d%d",&n,&m);
;i<=n;++i)
;j<=n;++j){
;
else p[i][j]=inf;
}
;i<=m;++i){
int x,y,z;
scanf ("%d%d%d",&x,&y,&z);
p[x][y]=z,p[y][x]=z;
}
int ans=prim();
){
printf("Not Unique!\n");
}
else{
//printf("%d\n", sprim(ans));
if (ans==sprim(ans)) printf("Not Unique!\n");
else printf("%d\n",ans);
}
}
;
}
3.CJOJ p2403 次小生成树
题意就是求严格的次小生成树 本来太懒准备直接按上一道题的方法写的结果看了看数据范围就瞬间怂了
想了一会儿 区别应该是这一次替换的必须是比尝试用于替换的这一条边小的边中最大的 因而那种预处理max的方式就挂掉了
思考40分钟 无果 开始蒟蒻的标准程式 看题解qaq
然后看到lca的那一刻觉得自己被掏空
打了两种方法 一种是乖乖的倍增 另一种是直接暴力一级一级跳
结果倍增比直接暴力要慢???不过没有慢很多 可能是我倍增打丑了或者是数据问题?
T了三四遍 最后发现自己忘了并查集路径压缩 我可能真的是要笨死了qaq(不是都说了不路径压缩的女孩子不可爱嘛还忘
另外妄想症真好听 给dela大哥哥跪orz
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<string>
#define ll long long
#define maxm 300010
#define maxn 100010
using namespace std;
struct hh{
int x,y;
ll z;
}q[maxm];
struct edge{
ll d;
int nxt,t;
}b[*maxm];
,lo;
int fa[maxm],head[maxn],dep[maxn],f[maxn];
ll dis[maxn];
bool u[maxm];
bool cmp(hh a,hh b){
return a.z<b.z;
}
int find(int x){
return x==fa[x]?x:fa[x]=find(fa[x]);//以后再忘压路径就是狗qwq
}
void link(int x,int y,int z){
b[++tot].nxt=head[x];
b[tot].d=z;
b[tot].t=y;
head[x]=tot;
}
void dfs(int x,int ff){
f[x]=ff;
for (int i=head[x];i;i=b[i].nxt){
if (b[i].t==ff) continue;
dep[b[i].t]=dep[x]+;
dis[b[i].t]=dis[x]+b[i].d;
dfs(b[i].t,x);
}
}
int lca(int x,int y){//强行暴力lca
if (dep[y]>dep[x]) swap(x,y);
while (dep[x]!=dep[y]) x=f[x];
while(x!=y) x=f[x],y=f[y];
return x;
}
ll mm(int x,int y,ll z){//min中的max
int an=lca(x,y);
ll ans=;
while (x!=an){
if (dis[x]-dis[f[x]]<z) ans=max(ans,dis[x]-dis[f[x]]);
x=f[x];
}
while (y!=an){
if (dis[y]-dis[f[y]]<z) ans=max(ans,dis[y]-dis[f[y]]);
y=f[y];
}
return ans;
}
int main(){
freopen ("3.in","r",stdin);
freopen ("3.out","w",stdout);
scanf ("%d%d",&n,&m);
;i<=m;++i) scanf ("%d%d%lld",&q[i].x,&q[i].y,&q[i].z);
sort(q+,q+m+,cmp);
;i<=n;++i) fa[i]=i;
;
ll sum=;
;i<=m;++i){
int xx=find(q[i].x),yy=find(q[i].y);
if (xx!=yy){
fa[xx]=yy;
link(q[i].x,q[i].y,q[i].z);
link(q[i].y,q[i].x,q[i].z);
u[i]=,sum+=q[i].z;
++l;
) break;
}
}//kruskal
dfs(,);
ll ans=;
;i<=m;++i){
if (u[i]) continue;
ll t=mm(q[i].x,q[i].y,q[i].z);
ans=min(ans,sum-t+q[i].z);//次小
}
printf("%lld\n",ans);
;
}
MST系列的更多相关文章
- 【函数】Oracle函数系列(2)--数学函数及日期函数
[函数]Oracle函数系列(2)--数学函数及日期函数 1 BLOG文档结构图 2 前言部分 2.1 导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不 ...
- 【转】并查集&MST题集
转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU]1213 How Many Tables 基础并查集★1272 小希的迷宫 基 ...
- HDU 畅通工程系列
畅通工程系列都是比较裸的最小生成树问题,且是中文题目,不赘述了. 1.HDU 1863 畅通工程 题意:一个省有很多村庄,其中一些之间是可以建公路的,每条公路都需要不同的代价,问代价最小的情况下将所有 ...
- Wix打包系列 (六)制作升级和补丁包
原文:Wix打包系列 (六)制作升级和补丁包 前面我们已经知道怎么制作一个完整安装包了,但我们的软件往往不能一次性就满足客户的需要,当客户需要我们给软件进行升级的时候,我们应该怎么做呢? 在这之前,我 ...
- HDU4522 湫湫系列故事——过年回家
传送门:点我 中文题面. 思路:拿spfa对卧铺和硬铺分别跑spfa,然后找两个的最短路.体感堆优化的dij也可以,不过spfa跑跑就过去了.有个细节是最后得用long long 存数据,其他的没啥. ...
- Intel 5 6 7 8系列芯片组介绍
Intel 5 6 7 8系列芯片组介绍 Iknow.2015-11-05 22:40|知识编号:122257 操作步骤: [Inetl 5.6.7.8系列芯片组介绍] 芯片组是主板电路的核心.一定意 ...
- Java日期时间API系列19-----Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格式化和时区转换等。
通过Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类中时间范围示意图:可以很清晰的看出ZonedDateTime相当于LocalDateTime+ZoneI ...
- Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求
上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...
- 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新
本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...
随机推荐
- shell,bash,zsh,console,terminal到底是什么意思,它们之间又是什么关系?
原文链接 终端(terminal,或者叫物理终端):是一种设备,不是一个程序,一般说的就是能提供命令行用户界面的设备,典型的是屏幕和键盘,或其他的一些物理终端.虚拟终端:屏幕和键盘只是一个终端,可能不 ...
- Sublime text3 代码格式化插件
使用 Sublime text 3 格式化HTML代码,需要安装插件,具体安装步骤如下: 1. 打开菜单 -> 首选项(Perferences) -> 插件控制(Packpage Cont ...
- golang关于一些新手不注意会出现的小问题
前言 最近在整理之前写程序,学习时所记录的有道云笔记,发现一些有意思的小点跟大家分享一下.如有错误请大家给指出 一.闭包 defer 闭包(匿名函数) func test(){ i, n := ,; ...
- docker学习(一)
docker的安装 (一)环境要求: 容器需要管理工具.runtime 和操作系统,选择如下: 1.管理工具 - Docker Engine 2.runtime - runc 3.操作系统 (二)安装 ...
- Sagit.Framework For IOS 开发框架入门开发教程1:框架下载与环境配置
背景: 前天开源了框架:开源:Sagit.Framework For IOS 开发框架 所以注定要追补一套开发教程了,所以尽量抽空了!!! 步骤 1:下载框架源码 GitHub:https://git ...
- 记一次高并发场景下.net监控程序数据上报的性能调优
最近在和小伙伴们做充电与通信程序的架构迁移.迁移前的架构是,通信程序负责接收来自充电集控设备的数据实时数据,通过Thrift调用后端的充电服务,充电服务收到响应后放到进程的Queue中,然后在管理线程 ...
- Apache+PHP+MySQL+phpMyAdmin环境搭建
最近在学习web服务端开发,一开始是使用wamp的,后来决定自己完整配置一下环境,并把整个过程记录下来.其中,Apache是服务器,php是用来编写服务端的语言,MySQL作为数据库,phpMyAdm ...
- tensorflow 自定义损失函数示例
这个自定义损失函数的背景:(一般回归用的损失函数是MSE, 但要看实际遇到的情况而有所改变) 我们现在想要做一个回归,来预估某个商品的销量,现在我们知道,一件商品的成本是1元,售价是10元. 如果我们 ...
- 【Scala-ML】使用Scala构建机器学习工作流
引言 在这一小节中.我将介绍基于数据(函数式)的方法来构建数据应用.这里会介绍monadic设计来创建动态工作流,利用依赖注入这种高级函数式特性来构建轻便的计算工作流. 建模过程 在统计学和概率论中, ...
- kotlin web开发教程【一】从零搭建kotlin与spring boot开发环境
IDEA中文输入法的智能提示框不会跟随光标的问题 我用的开发工具是IDEA 这个版本的IDEA有一个问题: 就是中文输入法的智能提示框不会跟随光标 解决这个问题的办法很简单,只有在安装目录下把JRE文 ...