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系列的更多相关文章

  1. 【函数】Oracle函数系列(2)--数学函数及日期函数

    [函数]Oracle函数系列(2)--数学函数及日期函数 1  BLOG文档结构图 2  前言部分 2.1  导读和注意事项 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不 ...

  2. 【转】并查集&MST题集

    转自:http://blog.csdn.net/shahdza/article/details/7779230 [HDU]1213 How Many Tables 基础并查集★1272 小希的迷宫 基 ...

  3. HDU 畅通工程系列

    畅通工程系列都是比较裸的最小生成树问题,且是中文题目,不赘述了. 1.HDU 1863 畅通工程 题意:一个省有很多村庄,其中一些之间是可以建公路的,每条公路都需要不同的代价,问代价最小的情况下将所有 ...

  4. Wix打包系列 (六)制作升级和补丁包

    原文:Wix打包系列 (六)制作升级和补丁包 前面我们已经知道怎么制作一个完整安装包了,但我们的软件往往不能一次性就满足客户的需要,当客户需要我们给软件进行升级的时候,我们应该怎么做呢? 在这之前,我 ...

  5. HDU4522 湫湫系列故事——过年回家

    传送门:点我 中文题面. 思路:拿spfa对卧铺和硬铺分别跑spfa,然后找两个的最短路.体感堆优化的dij也可以,不过spfa跑跑就过去了.有个细节是最后得用long long 存数据,其他的没啥. ...

  6. Intel 5 6 7 8系列芯片组介绍

    Intel 5 6 7 8系列芯片组介绍 Iknow.2015-11-05 22:40|知识编号:122257 操作步骤: [Inetl 5.6.7.8系列芯片组介绍] 芯片组是主板电路的核心.一定意 ...

  7. Java日期时间API系列19-----Jdk8中java.time包中的新的日期时间API类,ZonedDateTime与ZoneId和LocalDateTime的关系,ZonedDateTime格式化和时区转换等。

    通过Java日期时间API系列6-----Jdk8中java.time包中的新的日期时间API类中时间范围示意图:可以很清晰的看出ZonedDateTime相当于LocalDateTime+ZoneI ...

  8. Angular2入门系列教程7-HTTP(一)-使用Angular2自带的http进行网络请求

    上一篇:Angular2入门系列教程6-路由(二)-使用多层级路由并在在路由中传递复杂参数 感觉这篇不是很好写,因为涉及到网络请求,如果采用真实的网络请求,这个例子大家拿到手估计还要自己写一个web ...

  9. 【原】Android热更新开源项目Tinker源码解析系列之三:so热更新

    本系列将从以下三个方面对Tinker进行源码解析: Android热更新开源项目Tinker源码解析系列之一:Dex热更新 Android热更新开源项目Tinker源码解析系列之二:资源文件热更新 A ...

随机推荐

  1. iBatis & myBatis & Hibernate 要点记录

    iBatis & myBatis & Hibernate 要点记录 这三个是当前常用三大持久层框架,对其各自要点简要记录,并对其异同点进行简单比较. 1. iBatis iBatis主 ...

  2. idea+scala+spark遇到的一些问题

    1.windows中以本地模式运行spark遇到"Could not locate executable null\bin\winutils.exe in the Hadoop binari ...

  3. redis复制原理和应用

    1.前言 说到分布式高可用,必然少不了复制,一来是为了做个冗余备份防止数据丢失,二来还可以达到分流来提高性能的目的.基本架构: 下面用M表示Master(主服务器),S表示Slave(从服务器),话不 ...

  4. 关于mysql插入数据异常

    今天创建数据库时,在插入数据时出现了几个问题.(首次在LInux环境下创建数据库) 一个是关于SQL Error [1146] [42S02]: Table 'struts2exec.s_user' ...

  5. tnsping非常慢

    最近给同事虚拟机上安装了一个11g数据库,发现一个奇怪的问题,用windows客户段连接时候非常慢,慢到不能容忍的地步,但是本地os验证登录没有问题,速度非常快,初步定为问题出在监听上,于是我tnsp ...

  6. thinkphp使用foreach遍历的方法

    我们在做一些需求的时候可能会对遍历的上限有一定的要求,这时候就需要对上限进行限定 首先使用foreach遍历的输出数组相比较于volist功能较少 volist标签主要用于在模板中循环输出数据集或者多 ...

  7. Javascript-数值运算 保留小数点位数,并对最后一位小数各种取整方法

    今天遇到Javascript数值运算的坑,说到底,还是用得少啊.得多用多敲代码多遇坑. 先介绍以下三个Javascript number取整运算方法. Math.floor() 对一个数退一取整 例: ...

  8. cookie和session有什么区别,请你谈谈cookie的缺点

    1.区别: cookie机制采用的是在客户端保持状态的方案 session机制采用的是在服务端保持状态的方案 2.cookie: 优点: 1> 极高的扩展性和可用性 2> 通过编程方式,控 ...

  9. 基于DevExpress的BandedGridView动态生成多行(复合)表头

    最近cs项目中有个看板的功能需求,整个系统是基于DevExpress组件开发的,由于对这个组件的布局不是很熟,也借鉴了网上一些其他人的做法,普遍都是通过GridControl的BandedGridVi ...

  10. 通过Nutch扩展点开发插件(添加自定义索引字段到solr)

    爬虫系统:通过Nutch扩展点开发插件(添加自定义索引字段到solr) 准备工作 爬虫环境 -- nutch2.3.1 + solr4.10.3 + hbase0.98 开发环境 -- Eclipse ...