SPFA——热浪Heat Wave、捉迷藏Hide and Seek、电车
2017-10-13 21:48
246 查看
题目来源
洛谷P1339[USACO09OCT]热浪Heat Wavehttps://www.luogu.org/problem/show?pid=1339
洛谷P2951[USACO09OPEN]捉迷藏Hide
and Seek
https://daniu.luogu.org/problemnew/show/P2951
洛谷P1346电车
https://www.luogu.org/problemnew/show/P1346
思路
SPFA模板题代码(C++)[热浪Heat Wave]
#include <cstdio> #include <queue> #include <bitset> using namespace std; bitset<3000> in; queue<int> q; int n,m,s,t,u,v,w,cnt=0,pos,k; int he[3000],en[12500],ne[12500],len[12500]; long long dis[3000]; inline void add(); int main() { scanf("%d%d%d%d",&n,&m,&s,&t); for(int i=1;i<=m;++i) scanf("%d%d%d",&u,&v,&w),add(); for(int i=1;i<=n;++i) dis[i]=9223372036854775807; dis[s]=0; in[s]=1; q.push(s); while(!q.empty()) { pos=q.front(); q.pop(); in[pos]=0; k=he[pos]; while(k!=0) { if(dis[pos]+len[k]<dis[en[k]]) { dis[en[k]]=dis[pos]+len[k]; if(in[en[k]]==0) q.push(en[k]); in[en[k]]=1; } k=ne[k]; } } printf("%lld",dis[t]); return 0; } inline void add() { en[++cnt]=v; len[cnt]=w; ne[cnt]=he[u]; he[u]=cnt; en[++cnt]=u; len[cnt]=w; ne[cnt]=he[v]; he[v]=cnt; }
代码(C++)[捉迷藏Hide and Seek]
#include <cstdio> #include <queue> #include <bitset> #define N 20010 #define M 100010 using namespace std; bitset<N> in; queue<int> q; int n,m,s,t,u,v,w,cnt=0,pos,k; int he ,en[M],ne[M],len[M],a1,a2,a3; long long dis ; inline void add(); int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;++i) scanf("%d%d",&u,&v),w=1,add(); for(int i=2;i<=n;++i) dis[i]=9223372036854775807; in[1]=1; q.push(1); while(!q.empty()) { pos=q.front(); q.pop(); in[pos]=0; k=he[pos]; while(k!=0) { if(dis[pos]+len[k]<dis[en[k]]) { dis[en[k]]=dis[pos]+len[k]; if(in[en[k]]==0) q.push(en[k]); in[en[k]]=1; } k=ne[k]; } } for(int i=1;i<=n;++i) { if(dis[i]>a2) a2=dis[i],a1=i,a3=1; else if(dis[i]==a2) ++a3; } printf("%d %d %d",a1,a2,a3); return 0; } inline void add() { en[++cnt]=v; len[cnt]=w; ne[cnt]=he[u]; he[u]=cnt; en[++cnt]=u; len[cnt]=w; ne[cnt]=he[v]; he[v]=cnt; }
代码(C++)[电车]
#include <cstdio>#include <queue>
#include <bitset>
using namespace std;
bitset<110> in; queue<int> q;
int n,x,s,t,u,v,w,cnt=0,pos,dis[110];
int he[110],en[20010],ne[20010],len[20010];
inline void add();
int main()
{
scanf("%d%d%d",&n,&s,&
4000
amp;t);
for(int i=1;i<=n;++i)
{
scanf("%d",&x); u=i;
if(x!=0)
scanf("%d",&v),w=0,add();
for(int j=2;j<=x;++j)
scanf("%d",&v),w=1,add();
dis[i]=2147483647;
}
dis[s]=0; in[s]=1; q.push(s);
while(!q.empty())
{
pos=q.front(); q.pop(); in[pos]=0;
for(int k=he[pos];k!=0;k=ne[k])
if(dis[pos]+len[k]<dis[en[k]])
{
dis[en[k]]=dis[pos]+len[k];
if(in[en[k]]==0)
q.push(en[k]),in[en[k]]=1;
}
}
if(dis[t]==2147483647)
printf("-1");
else
printf("%d",dis[t]);
return 0;
}
inline void add()
{
en[++cnt]=v; len[cnt]=w;
ne[cnt]=he[u]; he[u]=cnt;
}
相关文章推荐
- SPFA基础模板 (洛谷1339 [USACO09OCT]热浪Heat Wave)
- 【洛谷1339】[USACO09OCT]热浪Heat Wave spfa
- bzoj 3408: [Usaco2009 Oct]Heat Wave 热浪 最短路
- 热浪解题报告(SPFA)
- 洛谷 1339 [USACO09OCT]热浪Heat Wave 最短路
- tyvj1031热浪——初学spfa
- SPFA(热浪)
- codevs 1557 热浪 SPFA 最短路
- [LUOGU] P1339 [USACO09OCT]热浪Heat Wave
- Heat Wave(热浪)附超大数据
- SPFA(热浪)
- bzoj 3386 && bzoj 3408: [Usaco2009 Oct]Heat Wave 热浪(最短路)
- 【洛谷 1339】【USACO 09 OCT】热浪 Heat Wave
- 洛谷 P1339 [USACO09OCT]热浪Heat Wave
- P1339 [USACO09OCT]热浪Heat Wave
- codevs 1557 热浪 SPFA 解题报告
- USACO 2009 Oct 热浪Heat Wave
- P1339 [USACO09OCT]热浪Heat Wave
- P1339 [USACO09OCT]热浪Heat Wave
- 洛谷P1346-电车【日常图论,最短路,SPFA】