zoukankan      html  css  js  c++  java
  • 差分约束系统——你能忍受得糖果数量

      poj3159

    题目大意:分糖,a 能忍受分的糖果数 最多比b少c个,给你一系列这些关系,求x能忍受y最多多几个

    学习了差分约束系统,了解了不等式<=以及>=对应得最短路最长路得转化,数形结合,也就很简单了,不过这个题有bug啊,正常得spfa中队列过不去,看了题解才知道都没过去哈哈哈,然后学习了模拟栈得用法(注释中),还是很好的~~

    #include <iostream>
    #include <queue>
    #include <cstdio>
    #include <string.h>
    #define inf 0x3f3f3f3f
    using namespace std;
    const int maxn = 3e4 + 3e2;
    const int maxm = 1e5 + 6e4;
    struct node{
        int to,cost;
        int pre;
    }edge[maxm];
    int id[maxn],cnt;
    int vis[maxn];
    int dis[maxn];
    int S[maxn];//模拟栈
    void init(int n)
    {
        memset(edge,0,sizeof(edge));
        memset(id,-1,sizeof(id));
        for(int i = 1;i <= n;i++)
        {
            vis[i] = 0;dis[i] = inf;
        }
        cnt = 0;
    }
    void add(int from,int to,int cost)
    {
        edge[cnt].to = to;
        edge[cnt].cost = cost;
        edge[cnt].pre = id[from];
        id[from] = cnt++;
    }
    void spfa(int s,int n)
    {
        vis[s] = 1,dis[s] = 0;
        int top = 0;//表示站内元素个数,并且充当索引功能
    
        S[top] = 1;
        top++;
        while(top)
        {
            int now = S[--top];
            vis[now] = 0;
            for(int i = id[now];~i;i = edge[i].pre)
            {
                int to = edge[i].to;
                int cost = edge[i].cost;
                if(dis[to] > dis[now] + cost)
                {
                    dis[to] = dis[now] + cost;
                    if(!vis[to])
                    {
                        vis[to] = 1;
                        S[top++] = to;
                    }
                }
            }
        }
    }
    int main()
    {
        int n,m,a,b,x;
        while(~scanf("%d%d",&n,&m))
        {
            init(n);
            while(m--)
            {
                scanf("%d%d%d",&a,&b,&x);
                add(a,b,x);
            }
            spfa(1,n);
            printf("%d
    ",dis[n]);
        }
        return 0;
    }
    

     感慨一下:原理非常可怕的spfa以及链式前向星,现在觉得和并查集基础dfsbfs差不多了,感觉信手什么来了~~,熟能生巧,多练多炼多恋吧~~

  • 相关阅读:
    jsp页面a标签URL转码问题
    函数的真面目实例
    野指针和内存操作实例
    redhat安装VMware tools的方法
    线索化二叉树实例
    遍历二叉树实例
    创建二叉树实例
    树的存储结构实例
    树的定义实例
    HBase基础和伪分布式安装配置
  • 原文地址:https://www.cnblogs.com/DF-yimeng/p/8531458.html
Copyright © 2011-2022 走看看