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. SELECT (Transact-SQL)

    从数据库中检索行,并允许从 SQL Server 中的一个或多个表中选择一个或多个行或列.  虽然 SELECT 语句的完整语法较复杂,但其主要子句可归纳如下: [ WITH <common_t ...

  2. HTML5+JS 《五子飞》游戏实现(一)规则

    很久没写文章了,这个游戏其实已经写了有段时间了,一直没有完善,赶在新年之际,分享给大家. 该<五子飞>游戏,不是平常大家所说的<五子棋>,这个玩法简单,是我们老家儿时常玩的一种 ...

  3. [BZOJ1299]巧克力棒(博弈论)

    题目:http://hzwer.com/1976.html 分析:先Orz hzwer 对于盒子外面的巧克力棒,就是Nim游戏. 所以就很容易想到先手第一步最好从盒子中取出m根巧克力棒,使得这些巧克力 ...

  4. XML的总结学习

    XML 指可扩展标记语言(eXtensible Markup Language). XML 被设计用来传输和存储数据. HTML 被设计用来显示数据.  (一切都是为了数据:采集.整理.存储.传输.显 ...

  5. isinstance

    class Foo: pass obj = Foo() isinstance(obj,Foo) class Foo: pass obj = Foo() isinstance(obj ,Foo) pri ...

  6. 显示当前用户所拥有的表&当前用户可以访问的所有表&数据库中的所有表&当前用户信息&当前用户所能管理的用户&数据库中所拥有的用户

    1)显示当前用户名称:show user或者show user; 2)显示当前用户信息(包括用户名之外还有其他信息):select * from user_users; 3)显示数据库中所含有的所有用 ...

  7. 折叠ListView

    转自 http://blog.csdn.net/hnyzwtf/article/details/50487228 1 activity_main.xml <?xml version=" ...

  8. iOS开发--利用MPMoviePlayerController播放视频简单实现

    一.包含头文件#import <MediaPlayer/MediaPlayer.h> 二.重点:给MPMoviePlayerController的view设置frame,并且将view添加 ...

  9. 唯一分解定理 poj 1365

    一行代表一个数 x 给你底数和指数 求x-1的唯一分解定理的底数和指数 从大到小输出 #include<stdio.h> #include<string.h> #include ...

  10. poj1523 求割点 tarjan

    SPF Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 7678   Accepted: 3489 Description C ...