题意:

给一个无向图,找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. SPOJ COT2 Count on a tree II (树上莫队,倍增算法求LCA)

    题意:给一个树图,每个点的点权(比如颜色编号),m个询问,每个询问是一个区间[a,b],图中两点之间唯一路径上有多少个不同点权(即多少种颜色).n<40000,m<100000. 思路:无 ...

  2. NSMutableDictionary 排序问题

    NSMutableDictionary 默认情况下是按字母的顺序进行排序的 (a-z)的默认排序如何自定义排序呢? 第一种,利用数组的sortedArrayUsingComparator调用 NSCo ...

  3. SEO 第九章

    SEO第九章 本次课目标: 1.  外部优化之平台优化 2.  如何撰写SEO诊断方案 一.外部平台优化——百度系列平台 百度系列的平台都是属于百度自己的产品,排名都是比较高的,所以我们在做外部推广的 ...

  4. 15分钟学会使用Git

    http://blog.csdn.net/u013510614/article/details/50588446 主体思想 Git作为一个复杂的版本控制系统,命令之多,相信很多小白已经望而却步,有的尝 ...

  5. ZGC,一个超乎想象的垃圾收集器

    Z Garbage Collector,即ZGC,是一个可伸缩的.低延迟的垃圾收集器,主要为了满足如下目标进行设计: 停顿时间不会超过10ms 停顿时间不会随着堆的增大而增大(不管多大的堆都能保持在1 ...

  6. 旅行商问题——状态压缩DP

    问题简介 有n个城市,每个城市间均有道路,一个推销员要从某个城市出发,到其余的n-1个城市一次且仅且一次,然后回到再回到出发点.问销售员应如何经过这些城市是他所走的路线最短? 用图论的语言描述就是:给 ...

  7. JOIN和UNION的区别

    join 是两张表根据条件相同的部分合并生成一个记录集. SELECT Websites.id, Websites.name, access_log.count, access_log.dateFRO ...

  8. github 从一个仓库换到另一个仓库

    1.找到.git目录   2.打开config文件 3.修改仓库地址 4.重新提交 git push --all origin 这样就替我们的项目换仓啦!!!^_^

  9. mac rar文件解压缩

    在下载文件时经常遇到RAR格式的压缩文件, 之前从APP Store下载了免费的解压软件, 但是总觉着不好用, 广告信息很多. 好用的软件都要花钱, 所以找到了命令行解决的办法. 步骤如下: 首先需要 ...

  10. InnoDB体系架构总结(一)

    缓冲池:    是一块内存区域,通过内存的速度来弥补磁盘速度较慢对数据库性能的影响.在数据库中读取的页数据会存放到缓冲池中,下次再读取相同页的时候,会首先判断该页是否在缓冲池中.对于数据库中页的修改操 ...