首页 > 其他分享 >洛谷 Luogu P1038 [NOIP2003 提高组] 神经网络

洛谷 Luogu P1038 [NOIP2003 提高组] 神经网络

时间:2023-07-16 21:26:14浏览次数:41  
标签:cnt P1038 洛谷 NOIP2003 int dfs hed return include

这题看着很吓人实则很简单。求输出层,正着求很麻烦,因为知不道谁连向这个点,所以可以反向建边,反着求。
拓扑+dfs,时间复杂度 \(\text{O(n + m)}\)

#include <iostream>
#include <cstdio>
#include <queue>

#define N 105
#define M (N * N / 2 + 114)

struct E {
    int v, w;
    int nxt;
} e[M];
int hed[N], cnt;
void add_edge(int u, int v, int w) {
    e[++cnt] = {v, w, hed[u]};
    hed[u] = cnt;
}

int C[N], U[N];
int n, m;

int indeg[N];
bool vis[N];
int dfs(int k) {
    if(vis[k])
        return C[k] > 0 ? C[k] : 0;
    vis[k] = 1;
    if(hed[k] == 0)
        return C[k] > 0 ? C[k] : 0;
    int res = 0;
    for(int i = hed[k]; i; i = e[i].nxt)
    {
        int v = e[i].v;
        res += dfs(v) * e[i].w;
    }
    C[k] = res - U[k];
    return C[k] > 0 ? C[k] : 0;
}

signed main() {
    scanf("%d %d", &n, &m);
    for(int i = 1; i <= n; i++)
        scanf("%d %d", &C[i], &U[i]);
    for(int i = 1, u, v, w; i <= m; i++)
    {
        scanf("%d %d %d", &u, &v, &w);
        add_edge(v, u, w);
        indeg[u]++;
    }
    for(int i = 1; i <= n; i++)
        if(indeg[i] == 0)
            dfs(i);
    bool flag = true;
    for(int i = 1; i <= n; i++)
        if(C[i] > 0 && indeg[i] == 0)
            flag = false;
    if(flag) {
        puts("NULL");
        return 0;
    }
    for(int i = 1; i <= n; i++)
        if(C[i] > 0 && indeg[i] == 0)
            printf("%d %d\n", i, C[i]);
    return 0;
}

标签:cnt,P1038,洛谷,NOIP2003,int,dfs,hed,return,include
From: https://www.cnblogs.com/kuailedetongnian/p/17558557.html

相关文章

  • 洛谷P1219 [USACO1.5] 八皇后 Checker Challenge
    写在前面我又回来了!偷了几天懒,还认识我吗?甭管认识不认识,还是要自我介绍一番:本人是初学c++的初中生,还是个蒟蒻,最要命的是没有脑子。今天,还请允许我浪费您一点时间,叨叨上几句。本题目来自于洛谷,网址https://www.luogu.com.cn/problem/P1219,建议在洛谷上看一下。本题解非盈利,无恶......
  • 洛谷 P4931 [MtOI2018] 情侣?给我烧了!(加强版)
    洛谷传送门设\(f_i\)为\(i\)对情侣完全错位的方案数,那么答案为:\[\binom{n}{k}\frac{n!}{(n-k)!}2^kf_{n-k}\]分别代表选择\(k\)对情侣,选择它们的位置,情侣可以换位。\(f_i\)有递推公式:\[f_i=4i(i-1)(f_{i-1}+2(i-1)f_{i-2})\]考虑选出两个人,另外......
  • How to ak 【LGR-145-Div.4】洛谷入门赛 #14?
    A数字判断#include<bits/stdc++.h>#include<ext/pb_ds/assoc_container.hpp>#include<ext/pb_ds/tree_policy.hpp>#include<ext/pb_ds/hash_policy.hpp>#definereregister#definelll__int128#definegcgetchar#defineptputchar#definei......
  • 洛谷 P6667 [清华集训2016] 如何优雅地求和
    洛谷传送门点值不好搞。考虑把它搞成系数一类的东西。由二项式反演,\(f(x)=\sum\limits_{i=0}^x\binom{x}{i}b_i\Leftrightarrowb_i=\sum\limits_{j=0}^i\binom{i}{j}(-1)^{i-j}f(j)\)。然后我们要求:\[\sum\limits_{k=0}^n\sum\limits_{i=0}^ms_i\bino......
  • 洛谷 P3372 【模板】线段树 1
    题目传送门题目描述如题,已知一个数列,你需要进行下面两种操作:1.将某一个数加上x2.求出某区间每一个数的和输入格式第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。接下来M行每行包含3......
  • 线段树模板 洛谷P3374 【模板】树状数组 1
    题目传送门题目描述如题,已知一个数列,你需要进行下面两种操作:1.将某一个数加上x2.求出某区间每一个数的和输入格式第一行包含两个整数N、M,分别表示该数列数字的个数和操作的总个数。第二行包含N个用空格分隔的整数,其中第i个数字表示数列第i项的初始值。接下来M行每行包含3......
  • 洛谷 P6892 [ICPC2014 WF] Baggage
    洛谷传送门感觉这题递归的思想挺值得借鉴的。特判\(n=3\)。首先根据样例不难猜测最小次数为\(n\)。事实上最小次数下界为\(n\),因为设\(x\)为当前相邻元素相同对数,不难发现除第一次操作外\(x\)最多增加\(2\),而终态中\(x=2n-2\)。我们尝试构造能达到下界的方案。......
  • 洛谷 P4869 albus就是要第一个出场 题解
    洛谷P4869albus就是要第一个出场题意给定一个长度为\(n\)的序列\(A\),设可重集合\(S=\left\{\operatorname{xor}_{i=1}^nA_ix_i\midx_i\in\{0,1\}\right\}\),即\(S\)为\(A\)的所有子集的异或和构成的集合。给定一个数\(k\),求\(k\)在\(S\)中的排名。如果\(S\)中......
  • 洛谷 P6109 - [Ynoi2009] rprmq1
    首先将修改操作差分为\(l_1\)时刻给\([l_2,r_2]\)中的值\(+v\),\(r_1+1\)时刻给\([l_2,r_2]\)中的值\(-v\)。这样第\(i\)行的状态相当于执行\(1\simi\)时刻的操作后的状态。猫树分治,把一个询问挂在线段树上满足\(l\lel_1\lemid\ler_1\ler\)的区间\([l,r]\)......
  • 洛谷P4715 【深基16.例1】淘汰赛
    写在前面这是本蒟蒻的第三篇题解。由于作者水平不高,本题解存在有数量庞大的错误。对于题解中的错误、可优化部分,欢迎各位大佬批评指正!不合适的部分,还请多多包涵!本题目来源于洛谷。网址https://www.luogu.com.cn/problem/P4715。本博客非营利性,如遇侵权,请联系作者删除,谢谢!题面......