题意:

给一个无向图,找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. Java编译时根据调用该方法的类或对象所属的类决定

    class Base{     int x = 1;     static int y = 2; } class Subclass extends Base{     int x = 4;     i ...

  2. RHEL6.4上Samba/NFS服务器简单配置

    近期在RHEL6.4上尝试搭建一个NAS,底层使用XFS文件系统,对外主要提供samba协议和NFS协议共享,这里把主要步骤记录下来. 环境:RHEL6.4,IP:192.168.50.117 1.关 ...

  3. Sql Server RowNumber和表变量分页性能优化小计

    直接让代码了,对比看看就了解了 当然,这种情况比较适合提取字段较多的情况,要酌情而定 性能较差的: WITH #temp AS                       (              ...

  4. Oracle AWR报告的生成

    生成AWR报告需要dbms_workload_repository包的权限. 一.以oracle用户登录到数据库服务器 二.进入SQLPLUS 三.执行脚本 @?/rdbms/admin/awrrpt ...

  5. Mysql数据库表的迁移和表的复制

    同一台服务器上的,数据库之间的表的迁移: create table db.tablename as select * from db2.tablename; 此sql使用于mysql,从一台服务器上的 ...

  6. 原创:shell两个整数的比较 思想版

    思想是学的 代码创作是自己的 很喜欢前几行的逻辑严谨 #!/bin/bash#判断两个整数的大小read -p "请输入两个整数a b :" a b #或者使用a=$1[ -z & ...

  7. js 逻辑运算符、等号运算符

    1 逻辑运算符 逻辑运算只有2个结果,一个为true,一个为false. 1.且&& ★ 两个表达式为true的时候,结果为true. ------------------------ ...

  8. Zend Studio 修改“代码字体和大小”

  9. python之str (字符型)

    用途: 存储少量的数据,+ *int 切片, 其他操作方法 切片还是对其进行任何操作,获取的内容全部是strl类型 存储数据单一 格式: 在python中用引号引起来的就是字符串 '今天吃了没?' 1 ...

  10. Android Studio中删除无效的字符串资源

    1.定位到当前项目中的strings.xml文件 1.菜单栏找到"Analyze"->"Run Inspection By Name..."->输入 ...