洛谷 P2483 [SDOI2010]魔法猪学院

P2483 [SDOI2010]魔法猪学院

k短路模板

  1 #include<queue>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<algorithm>
  5 using namespace std;
  6 const int maxn=10005;
  7 int n,m,s,t,k,num,head1[maxn*100],head2[maxn*100],tot;
  8 int nxt1[maxn*100],nxt2[maxn*100],cnt;
  9 double dis[maxn*100],e;
 10 queue<int>q; bool vis[maxn];
 11 struct Edge{
 12     int u,v;
 13     double d;
 14 }edge1[maxn*100],edge2[maxn*100];
 15
 16 struct Data{
 17     int num;
 18     double h,g;
 19     bool operator < (const Data x) const
 20     {
 21         if(h==x.h) return g>x.g;
 22         return h>x.h;
 23     }
 24 };
 25
 26 char ch;
 27 inline void read(int &now)
 28 {
 29     ch=getchar(); now=0;
 30     while(ch>‘9‘||ch<‘0‘) ch=getchar();
 31     while(ch>=‘0‘&&ch<=‘9‘) now=now*10+ch-‘0‘,ch=getchar();
 32 }
 33
 34 void add_Edge(int u,int v,double d)
 35 {
 36     edge2[++num].u=u;
 37     edge2[num].v=v;
 38     edge2[num].d=d;
 39     nxt2[num]=head2[u];
 40     edge1[num].u=v;
 41     edge1[num].v=u;
 42     edge1[num].d=d;
 43     nxt1[num]=head1[v];
 44     head2[u]=num;
 45     head1[v]=num;
 46 }
 47
 48 void spfa()
 49 {
 50     for(int i=0;i<=n;i++) dis[i]=0x7f;
 51     dis[t]=0;
 52     vis[t]=1;
 53     q.push(t);
 54     while(!q.empty())
 55     {
 56         int cur=q.front(); q.pop();
 57         for(int i=head2[cur];i;i=nxt2[i])
 58         {
 59             int v=edge2[i].v;
 60             if(dis[v]>dis[cur]+edge2[i].d)
 61             {
 62                 dis[v]=dis[cur]+edge2[i].d;
 63                 if(!vis[v])
 64                 {
 65                     vis[v]=1;
 66                     q.push(v);
 67                 }
 68             }
 69         }
 70         vis[cur]=0;
 71     }
 72 }
 73
 74 int astar()
 75 {
 76     priority_queue<Data>que;
 77     Data u,v,w;
 78     u.num=s;
 79     u.g=0;
 80     u.h=dis[s];
 81     que.push(u);
 82     while(!que.empty())
 83     {
 84         v=que.top(); que.pop();
 85         if(v.num==t)
 86         {
 87             e-=v.g;
 88             if(e>=0) tot++;
 89             else return tot;
 90         }
 91         for(int i=head1[v.num];i;i=nxt1[i])
 92         {
 93             w.num=edge1[i].v;
 94             w.g=v.g+edge1[i].d;
 95             w.h=w.g+dis[edge1[i].v];
 96             que.push(w);
 97         }
 98     }
 99 }
100
101 int main()
102 {
103     read(n); read(m); scanf("%lf",&e);
104     for(int i=1;i<=m;i++)
105     {
106         int x,y; double z;
107         read(x); read(y); scanf("%lf",&z);
108         add_Edge(y,x,z);
109     }
110     s=1; t=n;
111     spfa();
112     printf("%d\n",astar());
113     return 0;
114 }

时间: 2024-10-05 15:06:16

洛谷 P2483 [SDOI2010]魔法猪学院的相关文章

洛谷——P2483 [SDOI2010]魔法猪学院

https://www.luogu.org/problem/show?pid=2483 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与元素之间可以互相转换:能量守恒……. 能量守恒……iPig 今天就在进行一个麻烦的测验.iPig 在之前的学习中已经知道了很多种元素,并学会了可以转化这些元素的魔法,每种魔法需要消耗 iPig 一定的能量.作为

P2483 [SDOI2010]魔法猪学院

题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与元素之间可以互相转换:能量守恒--. 能量守恒--iPig 今天就在进行一个麻烦的测验.iPig 在之前的学习中已经知道了很多种元素,并学会了可以转化这些元素的魔法,每种魔法需要消耗 iPig 一定的能量.作为 PKU 的顶尖学猪,让 iPig 用最少的能量完成从一种元素转换到另一种元素--等等,i

Bzoj 1975: [Sdoi2010]魔法猪学院 dijkstra,堆,A*,K短路

1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 1357  Solved: 446[Submit][Status][Discuss] Description iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与元素之间可以互相转换:能量守恒……. 能量守恒……iPig 今

[BZOJ1975][SDOI2010]魔法猪学院(k短路,A*)

1975: [Sdoi2010]魔法猪学院 Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 2748  Solved: 883[Submit][Status][Discuss] Description iPig 在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了 解:众所周知,世界是由元素构成的:元素与元素之间可以互相转换:能量守恒……. 能量守恒……iPig

[K短路] SDOI2010 魔法猪学院

魔法猪学院 题目背景 感谢@kczno1 @X_o_r 提供hack数据 题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与元素之间可以互相转换:能量守恒--. 能量守恒--iPig 今天就在进行一个麻烦的测验.iPig 在之前的学习中已经知道了很多种元素,并学会了可以转化这些元素的魔法,每种魔法需要消耗 iPig 一定的能量.作为 PKU 的顶尖

洛谷P2483 Bzoj1975 [SDOI2010]魔法猪学院

题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与元素之间可以互相转换:能量守恒……. 能量守恒……iPig 今天就在进行一个麻烦的测验.iPig 在之前的学习中已经知道了很多种元素,并学会了可以转化这些元素的魔法,每种魔法需要消耗 iPig 一定的能量.作为 PKU 的顶尖学猪,让 iPig 用最少的能量完成从一种元素转换到另一种元素……等等,i

P2483 【模板】k短路([SDOI2010]魔法猪学院)

题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与元素之间可以互相转换:能量守恒--. 能量守恒--iPig 今天就在进行一个麻烦的测验.iPig 在之前的学习中已经知道了很多种元素,并学会了可以转化这些元素的魔法,每种魔法需要消耗 iPig 一定的能量.作为 PKU 的顶尖学猪,让 iPig 用最少的能量完成从一种元素转换到另一种元素--等等,i

BZOJ1975 [SDOI2010] 魔法猪学院

[问题描述] iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很 多的了解:众所周知,世界是由元素构成的:元素与元素之间可以互相转换:能量守恒--. 能量守恒--iPig 今天就在进行一个麻烦的测验.iPig 在之前的学习中已经知道了很多种元素,并学会了可以转化这些元素的魔法,每种魔法需要消耗 iPig 一定的能量.作为 PKU 的顶尖学猪,让 iPig 用最少的能量完成从一种元素转换到另一种元素--等

[SDOI2010]魔法猪学院

题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与元素之间可以互相转换:能量守恒……. 能量守恒……iPig 今天就在进行一个麻烦的测验.iPig 在之前的学习中已经知道了很多种元素,并学会了可以转化这些元素的魔法,每种魔法需要消耗 iPig 一定的能量.作为 PKU 的顶尖学猪,让 iPig 用最少的能量完成从一种元素转换到另一种元素……等等,i