poj 3255
#include<iostream>
#include<fstream>
#include<queue>
using namespace std;
struct e{
int data;
int cost;
e *next;
};
e edge[5001];
struct node{
int data;
int kind;
int weight;
friend bool operator <(node a,node b){
return a.weight>b.weight;
}
};
int n,m;
void add(int s,int t,int w){
e *p=new e;
p->data=t;
p->cost=w;
p->next=edge[s].next;
edge[s].next=p;
e *q=new e;
q->data=s;
q->cost=w;
q->next=edge[t].next;
edge[t].next=q;
}
int d[2][5001];
int v[2][5001];
void solve(){
int i,j,k;
priority_queue<node> q;
for(i=0;i<=1;i++)
for(j=1;j<=n;j++)
d[i][j]=100000000;
d[0][1]=0;
node a;
a.data=1;
a.kind=0;
a.weight=0;
q.push(a);
while(!q.empty())
{
a=q.top();
q.pop();
if(a.kind==1&&a.data==n)
{
cout<<a.weight<<endl;
return;
}
if(v[a.kind][a.data]) continue;
v[a.kind][a.data]=1;
e *p=edge[a.data].next;
while(p)
{
if(d[0][p->data]>a.weight+p->cost)
{
d[1][p->data]=d[0][p->data];
d[0][p->data]=a.weight+p->cost;
node b;
b.data=p->data;
b.kind=0;
b.weight=d[0][p->data];
q.push(b);
b.kind=1;
b.weight=d[1][p->data];
q.push(b);
}
else
if(d[1][p->data]>a.weight+p->cost)
{
d[1][p->data]=a.weight+p->cost;
node b;
b.data=p->data;
b.kind=1;
b.weight=d[1][p->data];
q.push(b);
}
p=p->next;
}
}
}
void read(){
// ifstream cin("in.txt");
int i,j,k,s,t,w;
cin>>n>>m;
for(i=1;i<=m;i++)
{
cin>>s>>t>>w;
add(s,t,w);
}
solve();
}
int main(){
read();
return 0;
}
#include<fstream>
#include<queue>
using namespace std;
struct e{
int data;
int cost;
e *next;
};
e edge[5001];
struct node{
int data;
int kind;
int weight;
friend bool operator <(node a,node b){
return a.weight>b.weight;
}
};
int n,m;
void add(int s,int t,int w){
e *p=new e;
p->data=t;
p->cost=w;
p->next=edge[s].next;
edge[s].next=p;
e *q=new e;
q->data=s;
q->cost=w;
q->next=edge[t].next;
edge[t].next=q;
}
int d[2][5001];
int v[2][5001];
void solve(){
int i,j,k;
priority_queue<node> q;
for(i=0;i<=1;i++)
for(j=1;j<=n;j++)
d[i][j]=100000000;
d[0][1]=0;
node a;
a.data=1;
a.kind=0;
a.weight=0;
q.push(a);
while(!q.empty())
{
a=q.top();
q.pop();
if(a.kind==1&&a.data==n)
{
cout<<a.weight<<endl;
return;
}
if(v[a.kind][a.data]) continue;
v[a.kind][a.data]=1;
e *p=edge[a.data].next;
while(p)
{
if(d[0][p->data]>a.weight+p->cost)
{
d[1][p->data]=d[0][p->data];
d[0][p->data]=a.weight+p->cost;
node b;
b.data=p->data;
b.kind=0;
b.weight=d[0][p->data];
q.push(b);
b.kind=1;
b.weight=d[1][p->data];
q.push(b);
}
else
if(d[1][p->data]>a.weight+p->cost)
{
d[1][p->data]=a.weight+p->cost;
node b;
b.data=p->data;
b.kind=1;
b.weight=d[1][p->data];
q.push(b);
}
p=p->next;
}
}
}
void read(){
// ifstream cin("in.txt");
int i,j,k,s,t,w;
cin>>n>>m;
for(i=1;i<=m;i++)
{
cin>>s>>t>>w;
add(s,t,w);
}
solve();
}
int main(){
read();
return 0;
}
浙公网安备 33010602011771号