首页 > 其他分享 >8-1900E - Transitive Graph

8-1900E - Transitive Graph

时间:2023-11-29 20:34:07浏览次数:35  
标签:int Graph 1900E ss second b1 b2 Transitive first

题意:

思路:tarjan缩点后,对新图DAG进行拓扑dp。
代码:

点击查看代码
#include<bits/stdc++.h>
#define int long long 
using namespace std;
const int N=1e6+7;
const int inf=1e9+7;
typedef pair<int,int> pll;
int n,m;
int dfn[N], low[N];
int vis[N];
vector<int> ve[N];
int deep=0;
stack<int> s;
int  color[N];
int sum=0;
void tarjan(int u) {
    dfn[u]=++deep;
    low[u]=deep;
    vis[u]=1;
    s.push(u);
    for(int i=0;i<ve[u].size();i++)
    {
        int v=ve[u][i];
        if(!dfn[v])
        {
            tarjan(v);
            low[u]=min(low[u],low[v]);
        }
        else
        {
            if(vis[v])
            {
                low[u]=min(low[u],low[v]);
            }
        }
    }
    if(dfn[u]==low[u])
    {
        color[u]=++sum;
        // cout<<u<<" "<<sum<<"s\n";
        vis[u]=0;
        while(s.size()&&s.top()!=u)
        {
            color[s.top()]=sum;
            vis[s.top()]=0;
            s.pop();
        }
        s.pop();
    }

}
pll w[N];
int a[N];
vector<int> v2[N];
vector<int> v3[N];
int rd[N];
void init()
{
    for(int i=1;i<=n;i++)
    {
        w[i]={0,0};
        v2[i].clear();
        ve[i].clear();
        v3[i].clear();
        vis[i]=0;
        dfn[i]=low[i]=0;
    }
    deep=0;
    sum=0;
    while(s.size())
    {
        s.pop();
    }
}
void solve()
{
    cin>>n>>m;
    init();
    int x,y,z;
    for(int i=1;i<=n;i++) cin>>a[i];
    for(int i=1;i<=m;i++)
    {
        cin>>x>>y;
        ve[x].push_back(y);
    }
    for(int i=1;i<=n;i++)
    {
        if(!dfn[i]) tarjan(i);
        //cout<<dfn[i]<<" ";
    }   
    for(int i=1;i<=n;i++)
    {
        w[color[i]].first++;
        w[color[i]].second+=a[i];
      //  cout<<color[i]<<" ";
        for(auto v:ve[i])
        {
            if(color[v]!=color[i])
            {
                v2[color[i]].push_back(color[v]);
                v3[color[v]].push_back(color[i]);
                rd[color[v]]++;
            }
        }
    }
    int a1=0,a2=0;
    queue<int> q; 
    for(int i=1;i<=sum;i++)
    {
        if(rd[i]==0)
        {   
            q.push(i);

        }
      //  cout<<w[i].first<<" "<<w[i].second<<" w\n";
    }
    while(q.size())
    {
        int w1=q.front();
        q.pop();
        // cout<<w1<<endl;
        for(auto v:v2[w1])
        {
            rd[v]--;

            if(rd[v]==0)
            {
                q.push(v);
                int b1=0,b2=0;
             
                for(int i=0;i<v3[v].size();i++)
                {
                    int ss=v3[v][i];
                    if(w[ss].first>b1)
                    {
                        b1=w[ss].first;
                        b2=w[ss].second;
                    }
                    else if(w[ss].first==b1)
                    {
                        b2=min(w[ss].second,b2);
                    }
                }

                w[v].first+=b1;
                w[v].second+=b2;
            }
            
        }
    }
    for(int i=1;i<=sum;i++)
    {
        if(w[i].first>a1)
        {
            a1=w[i].first;
            a2=w[i].second;
        }
        else if(w[i].first==a1)
        {
            a2=min(w[i].second,a2);
        }
    }
    
        cout<<a1<<" "<<a2<<"\n";
}
signed  main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);

   
    int t=1;
    cin>>t;
    while(t--)
    {
        solve();
    }
    return 0;
}

标签:int,Graph,1900E,ss,second,b1,b2,Transitive,first
From: https://www.cnblogs.com/xxj112/p/17865767.html

相关文章

  • [WARNING] The POM for com.alibaba:druid:jar:1.1.21 is invalid, transitive depend
    这个警告表明Maven在尝试下载或处理com.alibaba:druid:1.1.21这个依赖项时遇到了问题。警告的具体内容是说POM(ProjectObjectModel)文件无效,这可能会导致Maven无法正确地处理传递性依赖关系。有几种可能的原因和解决方法:1.网络问题:Maven可能无法从Maven仓库正确下载d......
  • 软件测试/人工智能|使用 GraphWalker 实现自动化测试用例生成
    导言在软件开发中,测试是确保代码质量和稳定性的关键步骤之一。而自动生成测试用例可以大大提高测试效率和覆盖率。GraphWalker是一个基于模型的测试工具,能够帮助开发者通过定义和遍历图模型来自动生成高质量的测试用例。GraphWalker简介GraphWalker是一个开源的测试工具,它......
  • Make Lexicographically Smallest Array by Swapping Elements
    MakeLexicographicallySmallestArraybySwappingElementsYouaregivena 0-indexed arrayof positive integers nums anda positive integer limit.Inoneoperation,youcanchooseanytwoindices i and j andswap nums[i] and nums[j] if |nums......
  • [XVI Open Cup GP of China] A. Graph Drawing
    那确实是神仙题,阅读jiangly代码遂取之。简要题意给定一个点双联通的平面图,保证每个点的度数不超过\(4\);具体地对于每个面将会按照逆时针顺序给出上面的顶点。现在要求把它画在无限大的网格上,要求边都平行于坐标轴,且彼此除了两端点外不接触。由于可能不能画出来,允许边进行任意......
  • 【略读论文|时序知识图谱补全】Tucker Decomposition with Frequency Attention for T
    会议:ACL,时间:2023,学校:北京航空航天大学,多伦多大学关键词:基于张量分解;频率注意力;正则化摘要:之前基于张量分解的TKGC模型存在仅独立考虑一种关系与一个时间戳的组合,忽略了嵌入的全局性质的问题。本文的方法:一种频率注意力(FA)模型来捕获一个关系与整个时间戳之间的全局时间依赖性。......
  • Information Graph 题解
    题目链接InformationGraph分析在线并不好做,考虑离线,先将树建出来\(2\)操作时\(x\)节点与当前根节点之间的点都会获得文件当前根节点可以用并查集维护对于查询的节点判断它是否为链上的点即可具体的,若该节点为\(rt\)子树中的点且该节点的子树包含\(x\)节点,它就......
  • [ARC105E] Keep Graph Disconnected
    题目链接好题。如果\(1\)和\(n\)一直联通,开始即结束。如果\(n\mod4=1\),那么\(\frac12x(x+1)+\frac12(n-x)(n-x+1)\)为偶数。如果\(n\mod4=3\),那么\(\frac12x(x+1)+\frac12(n-x)(n-x+1)\)为奇数。这两种情况最后连的边的数量奇偶固定,结合\(m\)的大小可以算出......
  • Learning Graph Filters for Spectral GNNs via Newton Interpolation
    目录概符号说明MotivationNewtonNet代码XuJ.,DaiE.,LuoD>,ZhangX.andWangS.Learninggraphfiltersforspectralgnnsvianewtoninterpolation.2023.概令谱图网络的多项式系数按照牛顿插值的方式训练.符号说明\(\mathcal{V}=\{v_1,\ldots,v_N\}\),nod......
  • Graph Neural Networks with Diverse Spectral Filtering
    目录概符号说明DSF代码GuoJ.,HuangK,YiX.andZhangR.Graphneuralnetworkswithdiversespectralfiltering.WWW,2023.概为每个结点赋予不同的多项式系数.符号说明\(\mathcal{V}\),nodeset,\(|\mathcal{V}|=N\);\(\mathcal{E}\),edgeset;\(\mathcal{......
  • Convolutional Neural Networks on Graphs with Chebyshev Approximation, Revisited
    目录概符号说明MotivationChebNetII代码HeM.,WeiZ.andWenJ.Convolutionalneuralnetworksongraphswithchebyshevapproximation,revisited.NIPS,2022.概作者剖析了ChebNet存在的一些缺陷,并通过约束系数获得更好的性能.符号说明\(V\),nodeset;\(E\),......