POJ 1797 【一种叫做最大生成树的很有趣的贪心】【也可以用dij的变形思想~】
题意:
给一个无向图,找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的变形思想~】的更多相关文章
- poj 1797 Heavy Transportation(最大生成树)
poj 1797 Heavy Transportation Description Background Hugo Heavy is happy. After the breakdown of the ...
- (POJ 1797) Heavy Transportation 最大生成树
题目链接:http://poj.org/problem?id=1797 Description Background Hugo Heavy is happy. After the breakdown ...
- POJ 1797 Heavy Transportation(最大生成树/最短路变形)
传送门 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K Total Submissions: 31882 Accept ...
- POJ 1797 Heavy Transportation 【最大生成树的最小边/最小瓶颈树】
Background Hugo Heavy is happy. After the breakdown of the Cargolifter project he can now expand bus ...
- POJ 1797 Heavy Transportation (最大生成树)
题目链接:POJ 1797 Description Background Hugo Heavy is happy. After the breakdown of the Cargolifter pro ...
- POJ 1797 Heavy Transportation (Dijkstra)
题目链接:POJ 1797 Description Background Hugo Heavy is happy. After the breakdown of the Cargolifter pro ...
- POJ 1797 Heavy Transportation (Dijkstra变形)
F - Heavy Transportation Time Limit:3000MS Memory Limit:30000KB 64bit IO Format:%I64d & ...
- POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径)
POJ 1797 Heavy Transportation / SCU 1819 Heavy Transportation (图论,最短路径) Description Background Hugo ...
- POJ.1797 Heavy Transportation (Dijkstra变形)
POJ.1797 Heavy Transportation (Dijkstra变形) 题意分析 给出n个点,m条边的城市网络,其中 x y d 代表由x到y(或由y到x)的公路所能承受的最大重量为d, ...
随机推荐
- Javaweb学习笔记3—Serverlet
今天来讲javaweb的第三个阶段学习. 老规矩,首先先用一张思维导图来展现今天的博客内容. ps:我的思维是用的xMind画的,如果你对我的思维导图感兴趣并且想看到你们跟详细的备注信息,请点击下载 ...
- Java URL 中文乱码解决办法
一. 统一所有的编码格式 (1)JSP页面设置:<%@ page language="java" import="java.util.*" pageEnc ...
- Solidity 智能合约开发
需要专用浏览器或部署节点支持. Solidity (中文:固态,固体)是一种语法与Javascript相似的高级语言,它为Ethereum虚拟机(EVM)编译代码而设计. Solidity是静态类型的 ...
- how to use Hexo
Hexo is a good tool to build a personal blog.Here are some good reference:1: https://hexo.io/zh-cn/d ...
- js将时间戳装换成日期格式
13位时间戳改为yyyy-MM-dd HH-mm-ss 格式 目标时间戳:1516324500000 formatDateTime (unix) { // 转换时间戳 var date = new D ...
- 深入Linux内核架构——进程虚拟内存
逆向映射(reverse mapping)技术有助于从虚拟内存页跟踪到对应的物理内存页: 缺页处理(page fault handling)允许从块设备按需读取数据填充虚拟地址空间. 一.简介 用户虚 ...
- 如何用纯 CSS 创作一种按钮被瞄准的交互特效
效果预览 按下右侧的"点击预览"按钮在当前页面预览,点击链接全屏预览. 在线演示 https://codepen.io/zhang-ou/pen/ELWMLr 可交互视频教程 此视 ...
- mybatis完整sql调试
问题描述 在使用mybatis进行开发的时候,由于可以动态拼接sql,这样大大方便了我们.但是也有一定的问题,当我们动态sql拼接的块很多的时候,我们要想从*mapper.xml中直接找出完整的sql ...
- 《算法导论》 — Chapter 10 基本数据结构
序 在本章中,要讨论如何通过使用了指针的简单数据结构表示动态集合.有很多的复杂的数据结构可以用指针来构造,本章介绍几种基本数据结构,包括栈.队列.链表,以及有根树. GitHub 第十章 程序实现代码 ...
- POJ 1611 The Suspects (并查集求数量)
Description Severe acute respiratory syndrome (SARS), an atypical pneumonia of unknown aetiology, wa ...