Til the Cows Come Home
#include<cstdio>
#include<vector>
#include<queue>
#include<algorithm>
#include<cstring>
using namespace std;
int d[1005];
int vis[1005];
typedef pair<int,int>p;
vector<p>r[1005];
vector<p>::iterator it;
void dj(int s){
priority_queue<p,vector<p>,greater<p> >q;
memset(vis,0,sizeof(vis));
d[s]=0;
q.push(p(d[s],s));
while(!q.empty()){
p tmp=q.top();
q.pop();
int v=tmp.second;
if(vis[v])
continue;
vis[v]=1;
for(it=r[v].begin();it!=r[v].end();it++){
int dis=(*it).second;
int to=(*it).first;
if(!vis[to]&&d[to]>d[v]+dis)
d[to]=d[v]+dis,q.push(p(d[to],to));
}
}
}
int main(){
int t,n;
while(~scanf("%d%d",&t,&n)){
int u,v,w;
for(int i=1;i<=n;i++)
d[i]=2e9;
for(int i=0;i<t;i++){
scanf("%d%d%d",&u,&v,&w);
r[u].push_back(p(v,w));
r[v].push_back(p(u,w));
}
dj(n);
printf("%d\n",d[1]);
}
return 0;
}
Frogger
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<queue>
using namespace std;
const int N=1005;
struct node{
double x,y;
}a[N];
double ans;
int vis[N],n;
double d[N];
typedef pair<int,double>p;
typedef pair<double,int>p1;
double cost[N][N];
vector<p>::iterator it;
double dis(double x,double y,double x1,double y1){
return sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
}
void dj(int s){
memset(vis,0,sizeof(vis));
d[s]=0.0;
priority_queue<p1,vector<p1>,greater<p1> >q;
q.push(p1(d[s],s));
while(!q.empty()){
p1 tmp=q.top();
q.pop();
int v=tmp.second;
if(vis[v])
continue;
vis[v]=1;
for(int j=1;j<=n;j++){
double dis=cost[v][j];
if(!vis[j]&&d[j]>max(dis,d[v])){
d[j]=max(d[v],dis);
q.push(p1(d[j],j));
}
}
}
}
int main(){
int ca=0;
while(~scanf("%d",&n)&&n){
for(int i=1;i<=n;i++){
scanf("%lf%lf",&a[i].x,&a[i].y);
}
for(int i=1;i<=200;i++)
d[i]=20000000.0;
fill_n(cost[0], N*N, 0x3f);
ans=0.0;
for(int i=1;i<=n;i++){
for(int j=i+1;j<=n;j++){
double w=dis(a[j].x,a[j].y,a[i].x,a[i].y);
cost[i][j]=cost[j][i]=w;
}
}
dj(1);
if(ca)
printf("\n");
printf("Scenario #%d\n",++ca);
printf("Frog Distance = %.3f\n",d[2]);
}
return 0;
}