xxx游戏

Time Limit: 1000MS     Memory Limit: 32768 KB

Description

小M最近很喜欢玩XXX游戏。这个游戏很简单,仅由3个场景(分别为1、2、3)构成构成,只存在1->2、2->3、3->1的路径,三条路径的时间花费都是1个小时。由于剧情需要,这个游戏有N个剧情任务,每个剧情任务在其中一个场景中完成,但是某些剧情的触发前提是一些必要剧情任务已经完成。为了简化问题,每个剧情任务都只需要一个小时就可以完成。小M想要花最少的时间通关,然而他还有很多考试,所以请你计算出通关所需要的最少时间。一开始,你可以选择1、2、3其中一个场景开始做任务。

Input

第一行为整数T(T

Output

最少时间数。

Sample Input

2
1
1
0
5
2 2 1 1 3
1 5
2 5 1
2 5 4
1 5
0

Sample Output

1
7

思路:

枚举三个场景为起点的情况,对于每个情况,对每个场景模拟一次拓扑排序,得到最小时间。

#include<iostream>
#include<cstdio>
#include<cstring>
#include<queue>
#include<vector>
#include<algorithm>
using namespace std;
typedef __int64 LL;
vector<int>itv[5],edge[250];
int Indegree[250];
int In[250];
int id[250];
int solve(int x)
{
    int res = 0;
    queue<int>que[5];
    for (int i = 0;i < 250;i++)
    {
        In[i] = Indegree[i];
    }
    for (int i = 1;i <= 3;i++)
    {
        for (int j = 0;j < itv[i].size();j++)
        {
            if (In[itv[i][j]] == 0)
            {
                que[i].push(itv[i][j]);
            }
        }
    }
    for (int i = x;;i++)
    {
        i %= 3;
        if (i == 0) i = 3;
        while (!que[i].empty())
        {
            int val = que[i].front();
            que[i].pop();
            res++;
            for (int j = 0;j < edge[val].size();j++)
            {
                if (--In[edge[val][j]] == 0)
                {
                    que[id[edge[val][j]]].push(edge[val][j]);
                }
            }
        }
        if (que[1].empty() && que[2].empty() && que[3].empty())
        {
            break;
        }
        res++;
    }
    return res;
}

int main()
{
    int T;
    scanf("%d",&T);
    while (T--)
    {
        memset(Indegree,0,sizeof(Indegree));
        memset(id,0,sizeof(id));
        for (int i = 0;i < 5;i++)
        {
            itv[i].clear();
        }
        for (int i = 0;i < 250;i++)
        {
            edge[i].clear();
        }
        int N,cnt,tmp;
        scanf("%d",&N);
        for (int i = 1;i <= N;i++)
        {
            scanf("%d",&tmp);
            itv[tmp].push_back(i);
            id[i] = tmp;
        }
        for (int i = 1;i <= N;i++)
        {
            scanf("%d",&cnt);
            while (cnt--)
            {
                scanf("%d",&tmp);
                edge[tmp].push_back(i);
                Indegree[i]++;
            }
        }
        int res = 0x3f3f3f3f;
        for (int i = 1;i <= 3;i++)
        {
            res = min(res,solve(i));
        }
        printf("%d\n",res);
    }
    return 0;
} 

FZU xxx游戏(拓扑排序+暴力)的更多相关文章

  1. [BZOJ5288][HNOI2018]游戏(拓扑排序)

    传送门:https://www.luogu.org/problemnew/show/P4436 20分的暴力加一个Random_shuffle就A了.我还能说什么.. 不过这个也不是毫无道理,复杂度应 ...

  2. [HNOI2018]游戏[拓扑排序]

    题意 题目链接 分析 先将没有锁的房间缩点,首先有一个 \(O(n^2)\) 的想法:从每个点出发,每次检查能否向两边扩张. 容易发现门和门之间如果有锁,必然只有一方能够开锁(只有一把钥匙),并且能够 ...

  3. Sorting It All Out POJ - 1094 拓扑排序

    题意:给N个字母,和M个偏序关系 求一个可确定的全序,可确定是指没有其他的可能例如A>B D>B 那么有ADB DAB两种,这就是不可确定的其中,M个偏序关系可以看做是一个一个按时间给出的 ...

  4. Problem 1014 xxx游戏 暴力+拓扑排序

    题目链接: 题目 Problem 1014 xxx游戏 Time Limit: 1000 mSec Memory Limit : 32768 KB 问题描述 小M最近很喜欢玩XXX游戏.这个游戏很简单 ...

  5. 【BZOJ5288】[HNOI2018]游戏(拓扑排序)

    [BZOJ5288][HNOI2018]游戏(拓扑排序) 题面 BZOJ 洛谷 题解 去年省选的时候这题给我乱搞整过去整过去了,也是虐心了.... 所以当然是来讲正儿八经的正确做法啦. 很明显,我们需 ...

  6. Codeforces Gym-102219 2019 ICPC Malaysia National J. Kitchen Plates (暴力,拓扑排序)

    题意:给你5个\(A,B,C,D,E\)大小关系式,升序输出它们,如果所给的大小矛盾,输出\(impossible\). 题意:当时第一眼想到的就是连边然后排序,很明显是拓扑排序(然而我不会qwq,之 ...

  7. D2欧拉路,拓扑排序,和差分约束

    第一题:太鼓达人:BZOJ3033 题意:给出k,求一个最长的M位01串,使其从每一个位置向后走k个得到 的M个k位01串互不相同(最后一个和第一个相邻,即是一个环).输出 字典序最小的答案. 2 ≤ ...

  8. 拓扑排序 - 并查集 - Rank of Tetris

    Description 自从Lele开发了Rating系统,他的Tetris事业更是如虎添翼,不久他遍把这个游戏推向了全球. 为了更好的符合那些爱好者的喜好,Lele又想了一个新点子:他将制作一个全球 ...

  9. 【BZOJ-1924】所驼门王的宝藏 Tarjan缩点(+拓扑排序) + 拓扑图DP

    1924: [Sdoi2010]所驼门王的宝藏 Time Limit: 5 Sec  Memory Limit: 128 MBSubmit: 787  Solved: 318[Submit][Stat ...

随机推荐

  1. 基于PHP的AJAX学习笔记(教程)

    本文转载自:http://www.softeng.cn/?p=107 这是本人在学习ajax过程所做的笔记,通过本笔记的学习,可以完成ajax的快速入门.本笔记前端分别使用原生态的javascript ...

  2. 子Div使用Float后如何撑开父Div

    如果想要撑开父元素可以采用以下方法: 方法一: 父元素设置overflow以及zoom,样式如下: 1 <style> 2   #div1{border:1px solid red;ove ...

  3. cocos2dx-2.2.1 免 Cygwin 环境搭建(Win8+VS2013+ADT Bundle+android-ndk-r9c)

    1.下载 ADT Bundle 解压到D盘 D:\adt-bundle-windows-x86_64-20131030: 2.下载 NDK-R9C,解压到 ADT 目录下:D:\adt-bundle- ...

  4. N-gram模型

    n元语法      n-gram grammar     建立在马尔可夫模型上的一种概率语法.它通过对自然语言的符号串中n个符号同时出现概率的统计数据来推断句子的结构关系.当n=2时,称为二元语法,当 ...

  5. CSS Bug

    父子标签间用margin的问题,表现在有时除IE(6/7)外的浏览器子标签margin转移到了父标签上,IE6&7下没有转移.测试代码: <body> <style type ...

  6. 35-less 简明笔记

    分屏显示文本文件 less [options] [file-list] less与more类似,但比more更加完善 例如:在显示一屏文本之后,less将显示提示副等待下一条命令的输入;可以向前或向后 ...

  7. extJs学习基础3 ajax与php交互

    extJs代码: <script src="build/ext-all.js"></script> <script src="build/p ...

  8. ScrollView内部元素如何做到fill_parent 或者 match_parent?

    转  : http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2014/0704/1629.html ScrollView滚动视图是指当拥有很多 ...

  9. iOS开发小技巧--获取自定义的BarButtonItem中的自定义View的方法(customView)

    如果BarButtonItem是通过[[UIBarButtonItem alloc] initWithCustomView:(nonnull UIView *)]方法设置的.某些情况下需要修改BarB ...

  10. 【BZOJ 1014】【JSOI 2008】火星人prefix

    看了<Hash在信息学竞赛中的一类应用>中的例题3,这道题很类似啊,只不过没有删点和区间翻转. 用Splay维护字符串哈希,加点改点什么的就不用说了,查询时二分答案,这样时间复杂度是$O( ...