首页 > 其他分享 >P3387 【模板】缩点

P3387 【模板】缩点

时间:2022-11-04 20:15:34浏览次数:54  
标签:缩点 co int top st P3387 dfn low 模板

#include<iostream>
#include<queue>
#include<vector>
using namespace std;
const int N = 1e4 + 1 ;
int n , m ;
vector < int > to [ N ] ;
int val [ N ] ;
void add ( int x , int y ) {
    to [ x ] . push_back ( y ) ;
}
int dfn [ N ] , low [ N ] , cnt ;
int a [ N ] , num [ N ] ;
int st [ N ] , top , co [ N ] , color ;
void Tarjan ( int x ) {
    dfn [ x ] = low [ x ] = ++ cnt;
    st [ ++ top ] = x;
    for ( auto y : to [ x ] ) {
        if ( ! dfn [ y ] )
            Tarjan ( y ),
            low [ x ] = min ( low [ x ] , low [ y ] ) ;
        else
            if ( ! co [ y ] )
            low [ x ] = min ( low [ x ] , dfn [ y ] ) ;
    }
    if ( low [ x ] == dfn [ x ] ) {
        color ++;
        while ( top && st [ top ] != x )
            co [ st [ top -- ] ] = color;
        co [ st [ top -- ] ] = color;
    }
    return;
}
vector < int > ex [ N ] ;
int in [ N ] , dist [ N ] , vis [ N ] , ans;
int main ( ) {
    cin >> n >> m;
    for ( int i = 1 ; i <= n ; i ++ )
        cin >> a [ i ] ;
    for ( int i = 1 ; i <= m ; i ++ )
    {
        static int x , y;
        cin >> x >> y;
        add ( x , y ) ;
    }
    for ( int i = 1 ; i <= n ; i ++ )
        if ( ! co [ i ] )
        Tarjan ( i ) ;
    for ( int i = 1 ; i <= n ; i ++ )
    {
        num [ co [ i ] ] += a [ i ] ;
        for ( auto j : to [ i ] ) {
            if ( co [ j ] == co [ i ] ) continue;
            ex [ co [ i ] ] . push_back ( co [ j ] ) ;
            in [ co [ j ] ] ++ ;
        }
    }
    deque < int > dq;
    for ( int i = 1 ; i <= color ; i ++ )
        ans = max ( ans , num [ i ] ) ;
    for ( int i = 1 ; i <= color ; i ++ )
        if ( in [ i ] == 0 )
            dq . push_back ( i ),
            dist [ i ] = num [ i ];
    while ( ! dq . empty ( ) ) {
        int x = dq . front ( ) ;
        dq . pop_front ( ) ;
        for ( auto y : ex [ x ] ) {
            if ( dist [ y ] < dist [ x ] + num [ y ] )
            {
                dist [ y ] = dist [ x ]  + num [ y ] ;
                ans = max ( ans , dist [ y ] ) ;
                if ( vis [ y ] == 0 ) dq . push_back ( y ) ;
            }
        }
    }
    cout << ans << endl;
    return 0 ;
}

标签:缩点,co,int,top,st,P3387,dfn,low,模板
From: https://www.cnblogs.com/dadidididi/p/16858953.html

相关文章

  • 解读Vue3模板编译优化
    今天的文章打算学习下Vue3下的模板编译与Vue2下的差异,以及VDOM下Diff算法的优化。编译入口了解过Vue3的同学肯定知道Vue3引入了新的组合Api,在组件mount阶......
  • P3865 【模板】ST表
    【模板】ST表题目背景这是一道ST表经典题——静态区间最大值请注意最大数据时限只有0.8s,数据强度不低,请务必保证你的每次查询复杂度为\(O(1)\)。若使用更高时间复......
  • 【单片机/嵌入式】【梁山派】学习日志02:工程模板创建
    工程模板创建一、新建工程目录1.1包含文件(1)Project:存放工程文件,编译文件等。(2)Firmware:存放ARM内核文件,标准外设库文件等。(3)Hardware:存放开发板的硬件驱动文件。(4)App......
  • 字典树模板+初始化模板
    https://codeforces.com/contest/1658/problem/D2intl,r;intson[M][2],idx;inta[N];voidinit(){//初始化**idx=0;son[0][0]=son[0][1]=0;}......
  • 使用非类型的模板参数和传普通参数的区别?
     如上所示、想完成加法操作有两种写法一种是用一个模板、一种是用两个参数虽然功能上差不多、但其中的区别还是有的:函数调用时要把压栈而模板里的东西只会......
  • 模板、特化模板和普通函数混用时的的匹配顺序
      有普通函数、总是会先调普通的函数、如上图、鼠标停在foo(3.0)上时会有一个对于普通函数的高亮如果没普通函数、而是有特化、那么会调用特化:   总结:编译器......
  • 模板方法模式
    数据库连接对数据库的操作一般包括连接、打开、使用、关闭等步骤,在数据库操作模板类中我们定义了connDB()、openDB()、useDB()、closeDB()四个方法分别对应这四个步骤。对......
  • CSS边框模板
    彩色渐变<divclass="gradient-border"id="box"/>#box{width:400px;height:200px;}.gradient-border{--borderWidth:3px;background:#1D1F20;......
  • 0004.Django Template之模板标签
    网页强制刷新:ctrl+F5常用标签模板标签作用,可以在模板中进行各种逻辑操作,比如,循环、判断等1.语法{%loadstatic%}    #加载第三方标签{%tag%}[{%endtag%......
  • 深入标签模板字面量
    模板字面量是ES6引入的一个新特性,它的出现扩展了字符串的可用性,使得拼接字符串和变量变得更加方便和全面。但它不仅限于拼接字符串和变量。还可以用于进行特殊函数调用,ES6......