zoukankan      html  css  js  c++  java
  • poj3159 最短路(差分约束)

    题意:现在需要分糖果,有n个人,现在有些人觉得某个人的糖果数不能比自己多多少个,然后问n最多能在让所有人都满意的情况下比1多多少个。

    这道题其实就是差分约束题目,根据题中给出的 a 认为 b 不能比 a 多 c 个,也就是 d[b] - d[a] ≤ c,就可以建立 value 值为 c 的单向边 e(a,b) ,然后先定d[1] = 0 ,用最短路跑完得到的 d[n] 就是所求答案。

     1 #include<stdio.h>
     2 #include<string.h>
     3 #include<algorithm>
     4 #include<queue>
     5 #include<vector>
     6 using namespace std;
     7 typedef pair<int,int> pii;
     8 
     9 int head[30005],point[150005],val[150005],next[150005],size;
    10 int dist[30005];
    11 
    12 struct cmp{
    13     bool operator()(pii a,pii b){
    14         return a.first>b.first;
    15     }
    16 };
    17 
    18 void add(int a,int b,int v){
    19     point[size]=b;
    20     val[size]=v;
    21     next[size]=head[a];
    22     head[a]=size++;
    23 }
    24 
    25 void dij(int s,int t){
    26     int i;
    27     priority_queue<pii,vector<pii>,cmp>q;
    28     memset(dist,0x3f,sizeof(dist));
    29     dist[s]=0;
    30     q.push(make_pair(dist[s],s));
    31     while(!q.empty()){
    32         pii u=q.top();
    33         q.pop();
    34         if(u.first>dist[u.second])continue;
    35         for(i=head[u.second];~i;i=next[i]){
    36             int j=point[i];
    37             if(dist[j]>dist[u.second]+val[i]){
    38                 dist[j]=dist[u.second]+val[i];
    39                 q.push(make_pair(dist[j],j));
    40             }
    41         }
    42     }
    43     printf("%d
    ",dist[t]);
    44 }
    45 
    46 int main(){
    47     int n,m;
    48     while(scanf("%d%d",&n,&m)!=EOF){
    49         int i;
    50         memset(head,-1,sizeof(head));
    51         size=0;
    52         for(i=1;i<=m;i++){
    53             int a,b,v;
    54             scanf("%d%d%d",&a,&b,&v);
    55             add(a,b,v);
    56         }
    57         dij(1,n);
    58     }
    59     return 0;
    60 }
    View Code
  • 相关阅读:
    Servlet 规范 简介
    Redis简介
    some tips
    初识Servlet
    JVM基础知识
    使用typora编辑博客
    航海が始まる日
    比较好的IT教程网
    vue 使用心得---工作中一些关键点
    Vue父组件主动获取子组件的数据和方法
  • 原文地址:https://www.cnblogs.com/cenariusxz/p/4785276.html
Copyright © 2011-2022 走看看