bzoj2015 [Usaco2010 Feb]Chocolate Giving(最短路裸题)
来源:互联网 发布:java bigdecimal 赋值 编辑:程序博客网 时间:2024/03/29 18:05
把1当作源点,答案就是d[x]+d[y]。试了一下两种写法。
spfa版,复杂度O(m)
124ms
#include <cstdio>#include <cstring>#include <algorithm>#include <queue>#define N 50010#define M 100010#define inf 0x3f3f3f3finline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int n,m,tt,h[N],num=0,d[N];bool f[N];struct edge{ int to,next,val;}data[M<<1];void spfa(){ std::queue<int>q; memset(d,0x3f,sizeof(d)); q.push(1);f[1]=1;d[1]=0; while(!q.empty()){ int x=q.front();q.pop();f[x]=0; for(int i=h[x];i;i=data[i].next){ int y=data[i].to; if(d[x]+data[i].val<d[y]){ d[y]=d[x]+data[i].val; if(!f[y]) f[y]=1,q.push(y); } } }}int main(){// freopen("a.in","r",stdin); n=read();m=read();tt=read(); while(m--){ int x=read(),y=read(),val=read(); data[++num].to=y;data[num].next=h[x];h[x]=num;data[num].val=val; data[++num].to=x;data[num].next=h[y];h[y]=num;data[num].val=val; } spfa(); while(tt--){ int x=read(),y=read(); printf("%d\n",d[x]+d[y]); } return 0;}
Dijkstra+STL版,复杂度O(nlogn)
144ms
#include <bits/stdc++.h>using namespace std;#define N 50010#define M 100010#define inf 0x3f3f3f3f#define pa pair<int,int>inline int read(){ int x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9') x=x*10+ch-'0',ch=getchar(); return x*f;}int n,m,tt,h[N],num=0,d[N];bool vis[N];struct edge{ int to,next,val;}data[M<<1];void Dijkstra(){ memset(d,0x3f,sizeof(d)); std::priority_queue<pa,vector<pa>,greater<pa> >q;//按first小根堆 q.push(make_pair(0,1));d[1]=0; while(!q.empty()){ int x=q.top().second;q.pop(); if(vis[x]) continue;vis[x]=1; for(int i=h[x];i;i=data[i].next){ int y=data[i].to; if(d[x]+data[i].val<d[y]){ d[y]=d[x]+data[i].val; q.push(make_pair(d[y],y)); } } }}int main(){// freopen("a.in","r",stdin); n=read();m=read();tt=read(); while(m--){ int x=read(),y=read(),val=read(); data[++num].to=y;data[num].next=h[x];h[x]=num;data[num].val=val; data[++num].to=x;data[num].next=h[y];h[y]=num;data[num].val=val; } Dijkstra(); while(tt--){ int x=read(),y=read(); printf("%d\n",d[x]+d[y]); } return 0;}
阅读全文
0 0
- bzoj2015 [Usaco2010 Feb]Chocolate Giving(最短路裸题)
- bzoj2015 [Usaco2010 Feb]Chocolate Giving
- [BZOJ2015][Usaco2010 Feb]Chocolate Giving
- [bzoj2015&&Usaco2010 Feb] Chocolate Giving
- BZOJ2015 [Usaco2010 Feb]Chocolate Giving
- chocolate giving[usaco2010 Feb]
- 2015: [Usaco2010 Feb]Chocolate Giving
- BZOJ 2015: [Usaco2010 Feb]Chocolate Giving spfa
- bzoj 2015: [Usaco2010 Feb]Chocolate Giving
- bzoj2014 [Usaco2010 Feb]Chocolate Buying
- USACO 2010 Feb Chocolate Giving 领取巧克力
- bzoj 2016: [Usaco2010]Chocolate Eating (二分)
- [BZOJ2016][Usaco2010]Chocolate Eating(二分)
- [bzoj2016][Usaco2010]Chocolate Eating(二分+贪心)
- BNUOJ 4157 Chocolate Giving
- 【bzoj2100】[Usaco2010 Dec]Apple Delivery 最短路
- bzoj3445[Usaco2014 Feb] Roadblock 最短路(记录路径)
- [Usaco2010]Chocolate Eating
- 软件目录结构规范
- mysql explain执行计划详解(查看索引执行)
- Android 通过基站进行定位
- 2017 Top 15 Python 数据科学类库;时间序列异常点检测;如何加入开源项目
- HTML渲染过程详解
- bzoj2015 [Usaco2010 Feb]Chocolate Giving(最短路裸题)
- EJB到底是什么?
- jdbc查询的统一方法
- 安全体系(三)——SHA1算法详解
- oracle创建索引 查看索引状态
- iOS AVCaptureSession学习笔记(一)
- 在一个千万级的数据库查寻中,如何提高查询效率?
- 大型分布式网站术语分析
- Bean Validation