[Usaco2010 Feb]Chocolate Giving 最短路dijkstra+堆优化

本人水平有限,题解不到为处,请多多谅解

本蒟蒻谢谢大家观看

题目:传送门

最短路板子题:迪杰斯特拉+堆优化

注意:因为我建的是大根堆,所以要将距离取负,再存入大根堆堆中,这样队首就是最小值

直接套模板即可

code:

 1 #include<bits/stdc++.h>
 2 #define inf 0x3f3f3f3f
 3 #pragma GCC optimize(3)
 4 const int N=50005;
 5 const int M=200002;
 6 using namespace std;
 7 int n,m,B;
 8 int tot;
 9 int ver[M],nxt[M],head[N],edge[M];
10 int dis[N];
11 int opt,ch;
12 bool flag[N];
13 priority_queue< pair<int,int> >q;//第一个是距离,第二个是节点编号
14 inline int read(){
15     int x=0,f=1;char ch=getchar();
16     while(!isdigit(ch)){if(ch==‘-‘)f=-1;ch=getchar();}
17     while(isdigit(ch)){x=(x<<1)+(x<<3)+(ch^48);ch=getchar();}
18     return x*f;
19 }
20 inline void write(int x)
21 {
22     if(x<0)x=-x,putchar(‘-‘);
23     if(x>9)write(x/10);
24     putchar(x%10+‘0‘);
25 }
26 void add(int x,int y,int z){
27     ++tot;
28     ver[tot]=y;
29     edge[tot]=z;
30     nxt[tot]=head[x];
31     head[x]=tot;
32 }
33 void dij(){
34 //    memset(dis,0x3f,sizeof(dis));
35 //    memset(flag,0,sizeof(flag));
36     for(int i=1;i<=n;i++){
37         dis[i]=inf;//因为求最短距离,所以距离初始最大
38         flag[i]=0;//所有点最开始都没有访问
39     }//初始化
40     dis[1]=0;//以1为根的点初始距离为0
41     q.push(make_pair(0,1));
42     while(q.size()){//当堆不为空时,才能访问
43         int x=q.top().second;//x为队首节点编号
44         q.pop();//取出x
45         if(flag[x])continue;//如果x先前已经访问过了,就不需要继续访问了
46         flag[x]=true;//否则就访问x,并把x打上已访问的标记
47         for(int i=head[x];i;i=nxt[i]){
48             int y=ver[i],z=edge[i];
49             if(dis[y]>dis[x]+z){//若根节点到y的距离大于到x的距离+当前的距离
50                 dis[y]=dis[x]+z;//更新,求最小值
51                 q.push(make_pair(-dis[y],y));//入堆
52             }
53         }
54     }
55 }
56 int main()
57 {
58     n=read(),m=read(),B=read();
59     for(int i=1,x,y,z;i<=m;i++){
60         x=read(),y=read(),z=read();
61         add(x,y,z);
62         add(y,x,z);
63     }
64     dij();
65     while(B--){
66         ch=read(),opt=read();
67         printf("%d\n",dis[ch]+dis[opt]);//依据题意
68     }
69     return 0;
70 }

原文地址:https://www.cnblogs.com/nlyzl/p/11766288.html

时间: 2024-10-10 10:08:09

[Usaco2010 Feb]Chocolate Giving 最短路dijkstra+堆优化的相关文章

BZOJ 2015: [Usaco2010 Feb]Chocolate Giving( 最短路 )

裸最短路.. ------------------------------------------------------------------------------------ #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> #include<queue> #define rep( i , n ) for( int i = 0 ; i <

bzoj2015[Usaco2010 Feb]Chocolate Giving*

bzoj2015[Usaco2010 Feb]Chocolate Giving 题意: n点m边无向图,有k头奶牛要送礼,它必须去农场(1号节点)拿礼物然后到目的地送.问每只奶牛的最短距离.n≤50000 题解: 以1号节点为源点spfa求一次最短路即可(反正是无向边). 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #include <queue> 5 #defi

2015: [Usaco2010 Feb]Chocolate Giving

2015: [Usaco2010 Feb]Chocolate Giving Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 269  Solved: 183[Submit][Status] Description Farmer John有B头奶牛(1<=B<=25000),有N(2*B<=N<=50000)个农场,编号1-N,有M(N-1<=M<=100000)条双向边,第i条边连接农场R_i和S_i(1<=R_i&

BZOJ 2015 Usaco2010 Feb Chocolate Giving

2015: [Usaco2010 Feb]Chocolate Giving Time Limit: 10 Sec  Memory Limit: 162 MBSubmit: 533  Solved: 348[Submit][Status][Discuss] Description Farmer John有B头奶牛(1<=B<=25000),有N(2*B<=N<=50000)个农场,编号1-N,有M(N-1<=M<=100000)条双向边,第i条边连接农场R_i和S_i(1

hdu 2544 单源最短路问题 dijkstra+堆优化模板

最短路 Time Limit: 5000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 41168    Accepted Submission(s): 17992 Problem Description 在每年的校赛里.全部进入决赛的同学都会获得一件非常美丽的t-shirt.可是每当我们的工作人员把上百件的衣服从商店运回到赛场的时候,却是非常累的.所以如今他们想要寻

Bzoj 1579: [Usaco2009 Feb]Revamping Trails 道路升级 dijkstra,堆,分层图

1579: [Usaco2009 Feb]Revamping Trails 道路升级 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1573  Solved: 428[Submit][Status][Discuss] Description 每天,农夫John需要经过一些道路去检查牛棚N里面的牛. 农场上有M(1<=M<=50,000)条双向泥土道路,编号为1..M. 道路i连接牛棚P1_i和P2_i (1 <= P1_i <= N;

bzoj2014[Usaco2010 Feb]Chocolate Buying*

bzoj2014[Usaco2010 Feb]Chocolate Buying 题意: n种巧克力,每种有个单价和最多能买几块,问有B块钱一共最多能买几块.n≤100000 题解: 贪心,按单价排序. 代码: 1 #include <cstdio> 2 #include <cstring> 3 #include <algorithm> 4 #define ll long long 5 #define inc(i,j,k) for(int i=j;i<=k;i++)

Bzoj 2834: 回家的路 dijkstra,堆优化,分层图,最短路

2834: 回家的路 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 62  Solved: 38[Submit][Status][Discuss] Description Input Output Sample Input 2 1 1 2 1 1 2 2 Sample Output 5 HINT N<=20000,M<=100000 Source dijkstra+堆优化+分层图 把所有的横向和纵向分开看.跑最短路即可. 注意:N这么大,不能写

POJ 3013 Big Christmas Tree【最短路变形,DIjkstra堆优化+spfa算法】

Big Christmas Tree Time Limit: 3000MS   Memory Limit: 131072K Total Submissions: 23064   Accepted: 4987 Description Christmas is coming to KCM city. Suby the loyal civilian in KCM city is preparing a big neat Christmas tree. The simple structure of t