XiaoY住在0城,要到在海边的城市去,求到海边城市的最短路径。
最短路。小数据量floyd直接过。
代码:
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
const int inf=0x3f3f3f3f;
int n;
bool sea[15];
int map[15][15];
void init(){
memset(map,0x3f,sizeof(map));
memset(sea,0,sizeof(sea));
}
void floyd(){
for(int k=0;k<n;k++){
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i!=j && i!=k && j!=k && map[i][j]>map[i][k]+map[k][j])
map[i][j]=map[i][k]+map[k][j];
}
}
}
}
int main(){
//freopen("in.txt","r",stdin);
while(cin>>n){
init();
for(int i=0;i<n;i++){
int m,p;
cin>>m>>p;
if(p==1) sea[i]=1;
else sea[i]=0;
while(m--){
int s,l;
cin>>s>>l;
if(map[i][s]>l) map[i][s]=l;
}
}
floyd();
int ans=inf;
for(int i=0;i<n;i++){
if(!sea[i]) continue;
if(ans>map[0][i]) ans=map[0][i];
}
cout<<ans<<endl;
}
return 0;
}