Day4(图论)

http://poj.org/problem?id=1201

#include<bits/stdc++.h>
using namespace std;
const int maxn=50004;
int dis[maxn],vis[maxn];
int head[maxn];
int cnt=0;
struct node{
    int to,next,w;
}e[maxn<<2];
inline void add(int u,int v,int w){
    e[++cnt].to=v;e[cnt].next=head[u];e[cnt].w=w;head[u]=cnt;
}
inline void spfa(int s){
    queue<int>q;
    q.push(s);
    dis[s]=0;
    vis[s]=1;
    while(!q.empty()){
        int x=q.front();q.pop();
        cout<<x<<' '<<dis[x]<<endl;
        for(int i=head[x];i!=-1;i=e[i].next){
            int v=e[i].to;
            if(dis[v]>dis[x]+e[i].w){
                dis[v]=dis[x]+e[i].w;
                if(!vis[v]) {
                    q.push(v);
                    vis[v]=1;
                }
            }
        }
        vis[x]=0;
    }
}
int main(){
    memset(head,-1,sizeof(head));
    for(int i=0;i<=50000;i++) add(i,i+1,1),add(i+1,i,0);
    int n;cin>>n;
    for(int i=1;i<=n;i++){
        int x,y,z;scanf("%d%d%d",&x,&y,&z);
        //add(x,y+1,z);
        add(y+1,x,-z);
    }
    memset(dis,0x3f,sizeof(dis));
    spfa(0);
    cout<<dis[50001];
}

猜你喜欢

转载自www.cnblogs.com/wifimonster/p/10223787.html