zoukankan      html  css  js  c++  java
  • luogu P1993 小K的农场

    刚看这道题题面时并没有觉得这是道图论题。后来仔细想了想发现spfa可以做(遇图不决spfa)在输入的时候加几个判定就完事了。

    上代码

    #include<cstdio>
    #include<algorithm>
    #include<cmath>
    #include<cstring>
    #include<iostream>
    using namespace std;
    const int maxn = 50005;
    int n, m;
    inline int read() {
        int a=0;
        char x=getchar();
        while(x<'0'||x>'9')x=getchar();
        while(x>='0'&&x<='9')a=(a<<3)+(a<<1)+x-48,x=getchar();
        return a;
    }
    struct edge {
        int to, nxt, w;
    } e[maxn];
    int dis[maxn], cnt, tot[maxn], dep[maxn];
    bool vis[maxn];
    inline void add(int u, int v, int W) {
        e[++cnt].to = v;
        e[cnt].nxt = dep[u];
        dep[u] = cnt;
        e[cnt].w = W;
    }
    inline bool spfa(int u) {
        vis[u] = 1;
        for(int i = dep[u]; i; i = e[i].nxt)
            if(dis[e[i].to] < dis[u] + e[i].w) {
                dis[e[i].to] = dis[u] + e[i].w;
                if(vis[e[i].to])
                    return 0;
                if(!spfa(e[i].to))
                    return 0;
            }
        vis[u]= 0;
        return 1;
    }
    int num, a, b, c;
    int main() {
        n = read();
        m = read();
        while(m--) {
            num = read();
            a = read();
            b = read();
            if(num == 1) {
                c = read();
                add(b,a,c);
            } else if(num == 2) {
                c = read();
                add(a,b,-c);
            } else if(num == 3) {
                add(a,b,0);
                add(b,a,0);
            }
        }
        for(int i = 1; i <= n; i++) {
            add(0,i,0);
            dis[i] = -23333333;
        }
        if(!spfa(0))
            printf("No");
        else
            printf("Yes");
        return 0;
    }
  • 相关阅读:
    Web全栈探索,Vue基础系列,前后端交互(四)
    幸运者
    整数加法
    猜数游戏
    multi-select 左右选择插件
    Layui 踩坑记录
    jQuery 封装公共方法
    前后端文件内容 md5 计算
    Apscheduler 定时任务
    Git 开发流程
  • 原文地址:https://www.cnblogs.com/jiqimin/p/10722900.html
Copyright © 2011-2022 走看看