(簡單) POJ 3159 Candies,Dijkstra+差分約束。

來源:互聯網
上載者:User

標籤:

  Description

  During the kindergarten days, flymouse was the monitor of his class. Occasionally the head-teacher brought the kids of flymouse’s class a large bag of candies and had flymouse distribute them. All the kids loved candies very much and often compared the numbers of candies they got with others. A kid A could had the idea that though it might be the case that another kid B was better than him in some aspect and therefore had a reason for deserving more candies than he did, he should never get a certain number of candies fewer than B did no matter how many candies he actually got, otherwise he would feel dissatisfied and go to the head-teacher to complain about flymouse’s biased distribution.

  snoopy shared class with flymouse at that time. flymouse always compared the number of his candies with that of snoopy’s. He wanted to make the difference between the numbers as large as possible while keeping every kid satisfied. Now he had just got another bag of candies from the head-teacher, what was the largest difference he could make out of it?

 

  題目就是差分約束問題,但是這個題卡SPFA。。。。。。

 

代碼如下:

#include <stdio.h>#include <string.h>#include <iostream>#include <algorithm>#include <vector>#include <queue>#include <set>#include <map>#include <string>#include <math.h>#include <stdlib.h>#include <time.h>    using namespace std;const int MaxN=30004;const int MaxM=150004;const int INF=10e9+7;struct Node{    int id,val;    Node(int _id=0,int _val=0):id(_id),val(_val) {}    bool operator < (const Node & a) const    {        return val>a.val;    }};struct Edge{    int to,next,cost;};Edge E[MaxM];int head[MaxN],Ecou;int vis[MaxN];void Dijkstra(int lowcost[],int N,int start){    priority_queue <Node> que;    Node temp;    int u,v,c;    for(int i=1;i<=N;++i)    {        lowcost[i]=INF;        vis[i]=0;    }    que.push(Node(start,0));    lowcost[start]=0;    while(!que.empty())    {        temp=que.top();        que.pop();        u=temp.id;        if(vis[u])            continue;        vis[u]=1;        for(int i=head[u];i!=-1;i=E[i].next)        {            v=E[i].to;            c=E[i].cost;            if(lowcost[v]>lowcost[u]+c && !vis[v])            {                lowcost[v]=lowcost[u]+c;                que.push(Node(v,lowcost[v]));            }        }    }}void init(int N){    for(int i=1;i<=N;++i)        head[i]=-1;    Ecou=0;}void addEdge(int u,int v,int c){    E[Ecou].to=v;    E[Ecou].cost=c;    E[Ecou].next=head[u];    head[u]=Ecou++;}int ans[MaxN];int main(){    //freopen("in.txt","r",stdin);    //freopen("out.txt","w",stdout);        int N,M;    int a,b,c;    scanf("%d %d",&N,&M);    init(N);    while(M--)    {        scanf("%d %d %d",&a,&b,&c);        addEdge(a,b,c);    }    Dijkstra(ans,N,1);    printf("%d\n",ans[N]);    return 0;}
View Code

 

(簡單) POJ 3159 Candies,Dijkstra+差分約束。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.