1210. Kind Spirits(spfa)

时间:2024-09-09 08:34:08

1210

简单模版题 敲个spfa还得瞟下模版。。

 #include <iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<stdlib.h>
#include<vector>
#include<queue>
using namespace std;
vector<int>ed[];
#define INF 0xfffffff
int dis[];
int vis[],g,o[][];
int spfa(int e)
{
memset(vis,,sizeof(vis));
queue<int>q;
for(int i = ; i <= g ; i++)
dis[i] = INF;
dis[] = ;
vis[] = ;
q.push();
while(!q.empty())
{
int u = q.front();
q.pop();
vis[u] = ;
for(int i = ; i < (int)ed[u].size() ;i++)
{
int v = ed[u][i];
if(dis[v]>dis[u]+o[u][v])
{
dis[v] = dis[u]+o[u][v];
if(!vis[v])
{
vis[v] = ;
q.push(v);
}
}
}
}
return dis[e];
}
int main()
{
int i,j,n,k,m,u,t;
char c[];
cin>>n;
g = ;t=;
for(i = ; i <= ;i++)
for(j = ; j <= ; j++)
if(i!=j)
o[i][j] = INF;
for(i = ; i <= n ;i ++)
{
cin>>m;
for(j =; j <= m ; j++)
{
g++;
while(cin>>k)
{
if(k==)
break;
cin>>u;
o[k+t][g] = u;
ed[k+t].push_back(g);
}
}
if(i!=n)
cin>>c;
t = g-m;
}
int minz = INF;
for(i = t+ ; i <= g ; i++)
minz = min(minz,spfa(i));
printf("%d\n",minz);
return ;
}