题意:

给一个无向图,找1到n所有的路中每条路最小权值的最大值!

屌丝一开始的思想是利用dij的变形~

但是==屌丝忘记了更新dis数组~结果TLE无数次...

说正经的~dij的变形思想是这样的if(dis[now]<min(dis[pos],w[pos][now]))则更新dis[now]....这种变形的证明和原来dij的证明是一样的~大家自己脑补啊~

heap优化的dij用时250ms~

上代码~

恶心的是不知道邻接表要搞多少边~这里RE无数次==

#include<stdio.h>
#include<string.h>
#include<queue>
using namespace std;
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
struct st
{
int w,id;
st(int a,int b){w=a;id=b;}
st(){}
};
struct cmp
{
bool operator()(const st &a,const st &b)
{
return a.w<b.w;
}
};
int n,m;
const int inf=;
int dis[];
struct edge
{
int id,w;
edge *next;
};
edge *adj[];
edge edges[];
int ednum;
inline void addEdge(int a,int b,int c)
{
edge *aa;
aa=&edges[ednum];
ednum++;
aa->id=b;
aa->w=c;
aa->next=adj[a];
adj[a]=aa;
}
int solve()
{
for(int i=; i<=n; i++)
{
dis[i]=-;
}
dis[]=inf;
st tmp;
priority_queue<st,vector<st>,cmp>q;
q.push(st(inf,));
while(!q.empty())
{
tmp=q.top();
q.pop();
if(tmp.id==n)
return tmp.w;
for(edge *p=adj[tmp.id];p;p=p->next)
{
if(dis[p->id]<min(dis[tmp.id],p->w))
{
dis[p->id]=min(dis[tmp.id],p->w);
q.push(st(dis[p->id],p->id));
}
}
}
}
int main()
{
int t,a,b,c;
scanf("%d",&t);
for(int tt=; tt<=t; tt++)
{
scanf("%d%d",&n,&m);
ednum=;
for(int i=; i<=n; i++)
adj[i]=NULL;
for(int i=; i<=m; i++)
{
scanf("%d%d%d",&a,&b,&c);
addEdge(a,b,c);
addEdge(b,a,c);
}
printf("Scenario #%d:\n%d\n",tt,solve());
if(tt!=t)
printf("\n");
}
}

接下来是最大生成树的思想~

采用把边从大到小排序的思想,然后用并查集实现的方法~

每次加入边之后确认1和n的连通情况~当第一次实现两者连通之后就输出那条边的权值~

证明也是贪心的思想~大家自己脑补~

时间稍慢 344ms

上代码~

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
const int inf=;
int n,m;
bool ok;
int rel;
int min(int a,int b)
{
if(a<b)
return a;
return b;
}
struct edge
{
int st,ed,w;
};
int me[];
edge edges[];
bool cmp(edge a,edge b)
{
return a.w>b.w;
}
int findme(int a)
{
if(a!=me[a])
return me[a]=findme(me[a]);
return a;
} int main()
{
int t;
scanf("%d",&t);
for(int tt=;tt<=t;tt++)
{
ok=;
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
{
me[i]=i;
}
for(int i=;i<m;i++)
{
scanf("%d%d%d",&edges[i].st,&edges[i].ed,&edges[i].w);
}
sort(edges,edges+m,cmp);
for(int i=;i<m;i++)
{
int tmpa=findme(edges[i].st);
int tmpb=findme(edges[i].ed);
if(tmpa!=tmpb)
{
me[tmpb]=tmpa;
}
tmpa=findme();
tmpb=findme(n);
if(tmpa==tmpb)
{
rel=edges[i].w;
break;
}
}
printf("Scenario #%d:\n%d\n",tt,rel);
if(tt!=t)
printf("\n");
}
return ;
}

POJ 1797 【一种叫做最大生成树的很有趣的贪心】【也可以用dij的变形思想~】的更多相关文章

  1. poj 1797 Heavy Transportation(最大生成树)

    poj 1797 Heavy Transportation Description Background Hugo Heavy is happy. After the breakdown of the ...

  2. (POJ 1797) Heavy Transportation 最大生成树

    题目链接:http://poj.org/problem?id=1797 Description Background Hugo Heavy is happy. After the breakdown ...

  3. POJ 1797 Heavy Transportation(最大生成树/最短路变形)

    传送门 Heavy Transportation Time Limit: 3000MS   Memory Limit: 30000K Total Submissions: 31882   Accept ...

  4. POJ 1797 Heavy Transportation 【最大生成树的最小边/最小瓶颈树】

    Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand bus ...

  5. POJ 1797 Heavy Transportation (最大生成树)

    题目链接:POJ 1797 Description Background Hugo Heavy is happy. After the breakdown of the Cargolifter pro ...

  6. POJ 1797 Heavy Transportation (Dijkstra)

    题目链接:POJ 1797 Description Background Hugo Heavy is happy. After the breakdown of the Cargolifter pro ...

  7. POJ 1797 Heavy Transportation (Dijkstra变形)

    F - Heavy Transportation Time Limit:3000MS     Memory Limit:30000KB     64bit IO Format:%I64d & ...

  8. POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径)

    POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径) Description Background Hugo ...

  9. POJ.1797 Heavy Transportation (Dijkstra变形)

    POJ.1797 Heavy Transportation (Dijkstra变形) 题意分析 给出n个点,m条边的城市网络,其中 x y d 代表由x到y(或由y到x)的公路所能承受的最大重量为d, ...

随机推荐

  1. Javaweb学习笔记10—文件上传与下载

    今天来讲javaweb的第10阶段学习.文件的上传与下载,今天主要说的是这个功能的实现,不用说了,听名字就是外行人也知道肯定很重要啦. 老规矩,首先先用一张思维导图来展现今天的博客内容.       ...

  2. ICEcoder显示汉字出现乱码的处理

    在网上看到icecoder这个小东西,是一个基于web的编辑器,很不错.唯一的缺点是打开的文件中汉字会变成乱码. 经查看源代码,在lib/file-control.php中,第89行是: echo ' ...

  3. 在proe模型文件里面存储用户数据

    存储外部数据 author:visualsan 2014.2 上海 1.简介 利用外部数据存储外部接口,可以在模型文件里面尺寸用户自定义数据.在模型保存时数据自动存储,在模型载入时数据自动载入.外部数 ...

  4. 如何在运行时改变App的图标

    在你完成应用程序的beta版本后,最后会有些人去帮你测试,使你去完善应用程序……或者会有投资青睐.但是如果测试人员有一种简单地方式去检查构建版本的应用程序会不会有帮助呢? 这个教程将会向你展示这些,向 ...

  5. linux之awk命令

    一.awk的内置参数 $0:表示整个当前行 $1:每行第一个字段 $2:每行第二个字段 $n:每行第n个字段 awk的参数:分隔符 -F separator 设定分隔符(默认为空格) 打印单个字段: ...

  6. Vue 在beaforeCreate时获取data中的数据

    众所周知,vue在beforecreate时期是获取不到data中的 数据的 但是通过一些方法可以实现在beforecreate时获取到data中的数据 暂时想到两种放发可以实现,vue在before ...

  7. v8引擎详解

    引用网址: https://blog.csdn.net/swimming_in_it_/article/details/78869549 前言 JavaScript绝对是最火的编程语言之一,一直具有很 ...

  8. idea集成 MyBatis Generator 插件,自动生成dao,model,sql map文件

    1.集成到开发环境中 以maven管理的功能来举例,只需要将插件添加到pom.xml文件中即可.(注意此处是以plugin的方式,放在<plugins></plugins>中间 ...

  9. centos7 rsync+inotify软件实现集群服务的数据备份(一)

    一.rsync软件的说明: 1.1 什么是rsync rsync是一个远程数据同步工具,可通过LAN/WAN快速同步多台主机间的文件.它使用所谓的“Rsync演算法”来使本地和远程两个主机之间的文件达 ...

  10. babel实践

    现在的主流浏览器还没有完全兼容ES6的语法,如ie11就不支持箭头函数. 使用过es6的人都知道,es6更加简洁和强大,可是使用es6写出来的代码并不能得到所有主流js引擎的支持,针对这一点,一个解决 ...