首页 > 其他分享 >CF1572A Book

CF1572A Book

时间:2024-06-04 20:56:22浏览次数:12  
标签:int 前置条件 拓扑 CF1572A Book que push 页码

题目链接:https://codeforces.com/problemset/problem/1572/A

大致思路:题目想问的是从头到尾阅读多少次之后,才能读完这本书.

这是一道很套路的拓扑排序的题.看到一个事件有前置条件这种,就应该想到建一个有向无环图然后跑拓扑排序,在这里,我们建立一条从前置条件指向当前页码的有向边.
很容易可以想到当然是从入度为0,即没有前置条件的页码出发开始读.
我们可以开一个二维的小根堆,第一维放需要操作多少次才能做到读这页书,第二维放当前的页码.接下来跑拓扑排序的时候时刻维护第一维的最大值,这个最大值就是满足所有情况的,能把书读完的步骤,也就是我们的答案.之后我们跑拓扑排序的时候,时刻注意判断页码顺序,然后依次维护第一维的操作次数即可.

typedef pair<int,int> PII;
#define maxn 200010
vector<int> vec[maxn];
void solve()
{
    int n;
    cin>>n;
    priority_queue<PII,vector<PII>,greater<PII> > que;
    vector<int> in(n+1,0);
    for(int i=1;i<=n;i++)
    {
        vec[i].clear();
    }
    for(int i=1;i<=n;i++)
    {
        int k;
        cin>>k;
        for(int j=1;j<=k;j++)
        {
            int v;
            cin>>v;
            vec[v].push_back(i);
            in[i]++;
        }
    }
    for(int i=1;i<=n;i++)
    {
        if(!in[i])
        {
            que.push({1,i});
        }
    }
    int maxx=0;
    vector<int> ans;
    while(!que.empty())
    {
        maxx=max(maxx,que.top().first);
        auto u=que.top();
        que.pop();
        ans.push_back(u.second);
        for(auto v:vec[u.second])
        {
            in[v]--;
            if(!in[v])
            {
                if(v>u.second)
                {
                    que.push({u.first,v});
                }
                else 
                {
                    que.push({u.first+1,v});
                }
            }
        }
    }
    if((int)ans.size()!=n)
    {
        cout<<-1<<'\n';
        return ;
    }
    cout<<maxx<<'\n';
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(0);
    cout.tie(0);
int t;
cin>>t;
while(t--)
    solve();
return 0;
}

标签:int,前置条件,拓扑,CF1572A,Book,que,push,页码
From: https://www.cnblogs.com/captainfly/p/18231693

相关文章

  • Facebook海外三不限 | 如何降低Facebook频繁被封的风险
    本文将讨论Facebook账户被封的原因及降低封禁风险的方法,以维护用户的账户安全和社交乐趣。1.常见原因:账户被封通常与发布违反社区标准的内容有关,如仇恨言论、暴力内容、欺诈虚假信息、非法活动、骚扰、版权侵权等。此外,未授权访问、频繁自动化操作、异常行为也可能导致账户......
  • Facebook企业广告账户/如何开户?
         还没接触过facebook广告营销的卖家可能会担心开户费用很高?其实不然,那么小编来给您介绍一下开户需要准备一些什么东西?代理商一般是如何收费的呢?Facebook,Google开企业广告账户/游戏代投Facebook企业户1、通过Facebook国内的服务商所开通的国内Facebook企业......
  • Macbook怎么快速提速?CleanMyMac 轻松帮你解决
    Mac是现代人日常工作时必不可少的工具,尤其是在居家办公已经屡见不鲜的当下。视频会议、文档传送、视频剪辑等等。它在工作中扮演的角色越来越重要,所以也导致了它的流畅程度可以在很大程度上影响人们一整天的工作效率和心情。但是影响Mac的运行和响应速度的因素有很多,其中有些......
  • CSS 权威指南 第4版 (it-ebooks)高清电子版阅读
    书:pan.baidu.com/s/1rBHxL2rPDZHMMiXRpWBefA提取码:393j我的阅读笔记CSS基础知识: 书中涵盖了CSS的基本概念,包括选择器、盒模型、布局、浮动等。CSS3新特性: 针对CSS3的新特性,包括过渡(transitions)、变换(transforms)、动画(animations)等进行了详细的讲解。响应式设计: 介绍了响......
  • Facebook企业户|Facebook海外户更容易起爆品,成效拉满
    哈喽呀各位UU,小编来喽~最近好多宝子都找小编了解Facebook海外企业广告账户哟!宝子们给到的账户反馈是“小编,我的产品起量啦,效果不错喔”这期咱们就针对这个话题聊聊让产品成效拉满,起爆品的Facebook海外企业广告账户吧。最近宝子们可以抓住时机快找小编开开户,起起量啦~ Fac......
  • Facebook海外企业户-注意事项
         Facebook是世界上最受欢迎的社交平台之一。它已被超过30亿用户使用。也是众多跨境电商商家的选择。那么,当你在海外建立一个企业账户或使用Facebook时,你应该注意哪些政策?为保证zFacebook,Google开企业广告账户/游戏代投账户下户顺利进行,避免出现以下问题:1.......
  • Facebook企业广告账户/如何开户?
     还没接触过facebook广告营销的卖家可能会担心开户费用很高?其实不然,那么小编来给您介绍一下开户需要准备一些什么东西?代理商一般是如何收费的呢?Facebook,Google开企业广告账户/游戏代投1、通过Facebook国内的服务商所开通的国内Facebook企业广告账户是不需要开户费的2......
  • Facebook代理商&Facebook三不限户、二不限户、BM户的区别
    随着全球化的发展,人们之间的交流和交易越来越频繁,越来越多的人开始使用互联网来处理自己的事务。这其中,Facebook(脸书)作为全球最大的社交媒体平台之一,拥有海内外两种不同类型的账户——Facebook海外户和国内户。今天我们来了解一下这两者有什么区别。Facebook海外户和国内户的......
  • 使用VMware Fusion在最新MacBook Pro(M3芯片)上安装Windows 11
    一、前期准备下载VMwareFusion:访问VMwareFusion的官方网站或可靠的下载源,下载适用于Mac的最新VMwareFusion版本(如VMwareFusion13.5.2)。这里我给出直接下载地址:https://pan.baidu.com/s/1VLJNp2FbpQ7s8a_OS_74VQ?pwd=cz3i下载完成后,双击下载的.dmg文件,然后按照屏幕上......
  • Facebook代运营 | Facebook广告投放步骤及要点
    Facebook体量大,素材的更新频率快,通过Facebook进行广告投放的用户也越来越多,Facebook坐拥大量用户,同时有着非常科学的用户画像构建系统和推送机制,对于很多广告涉足的伙伴来说,更加的友好。1.创建广告账户:访问Facebook广告管理平台并按照指南指引创建广告账户。2.设置广告目......