hihocoder #1179 : 永恒游戏 暴力

#1179 : 永恒游戏

Time Limit: 20 Sec

Memory Limit: 256 MB

题目连接

http://hihocoder.com/problemset/problem/1179

Description

很久很久以前,当Rowdark还是个善良的魔法师时,他在一个n个点m条边的无向图上玩一个游戏。

开始时他在一些点上放些石子。每次Rowdark选择一个点A,要求点A上的石子数大于等于邻居点个数。然后对A的每个邻居B,将A上的一个石子移到B上。如果不能选出这样的点A,那么游戏结束。Rowdark想知道这个游戏会不会无限循环。为了使问题更简单,你只需要求出是否10万轮后游戏仍然继续。

Input

第一行两个整数n和m(1 ≤ n ≤ 200)。

第二行n个整数a0, a1 ... an-1表示每个点上的石子个数(0 ≤ ai ≤ 109)。

接下来m行,每行两个数x和y (x ≠ y, 0 ≤ x, y ≤ n - 1),表示在x和y之间有一条边。题目保证没有重边,且任意一个点都有邻居。

Output

如果Rowdark能玩超过100000轮,输出“INF”(不带引号),否则输出最多步数。

Sample Input

3 3
1 2 1
0 1
1 2
2 0

Sample Output

INF

HINT

题意

题解:

每次我们都暴力选择剩下权值最多的点就好了,如果所有点的权值都小于这个点的度数的话,那么我们就输出-1

代码:

#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define test freopen("test.txt","r",stdin)
#define maxn 100001
#define mod 10007
#define eps 1e-9
const int inf=0x3f3f3f3f;
const ll infll = 0x3f3f3f3f3f3f3f3fLL;
inline ll read()
{
    ll x=0,f=1;char ch=getchar();
    while(ch<‘0‘||ch>‘9‘){if(ch==‘-‘)f=-1;ch=getchar();}
    while(ch>=‘0‘&&ch<=‘9‘){x=x*10+ch-‘0‘;ch=getchar();}
    return x*f;
}
//**************************************************************************************

vector<int> g[210];
long long a[210];
int deg[210];

int main() {
    int n, m;
    scanf("%d%d", &n, &m);
    for (int i = 0; i < n; i++)
    {
        scanf("%lld", &a[i]);
    }
    for (int i = 0; i < m; i++)
    {
        int u, v;
        scanf("%d%d", &u, &v);
        g[u].push_back(v);
        g[v].push_back(u);
        deg[u]++;
        deg[v]++;
    }
    for (int i = 0; i <= 100000; i++)
    {
        int id = -1;
        for (int i = 0; i < n; i++)
        {
            if (a[i] >= deg[i])
            {
                if (id == -1 || (a[i] - deg[i]) > (a[id] - deg[id]))
                {
                    id = i;
                }
            }
        }
        if (id == -1)
        {
            printf("%d\n", i);
            return 0;
        }
        else
        {
            for (int i = 0; i < g[id].size(); i++)
            {
                a[id]--;
                int v = g[id][i];
                a[v]++;
            }
        }
    }
    puts("INF");
    return 0;
}
时间: 2024-10-08 07:27:30

hihocoder #1179 : 永恒游戏 暴力的相关文章

hihoCoder #1179 : 永恒游戏 (暴力枚举)

题意:给出一个有n个点的无向图,每个点上有石头数个,现在的游戏规则是,设置某个点A的度数为d,如果A点的石子数大于等于d,则可以从A点给每个邻接点发一个石子.如果游戏可以玩10万次以上,输出INF,否则输出最多能玩几次. 思路:暴力枚举每个可以玩的点,假如可以玩无限次,且当前状态为Z(指所有点的石头数的序列作为一个状态),那么在玩了多次之后,一定会造成循环,也就是说,玩几次之后,每个点的石子数和初始的石子数一模一样,这样子我再重复之前是怎么玩的就可以无限玩了.但是由于有200个点,所以玩一次就去

暴力/图论 hihoCoder 1179 永恒游戏

题目传送门 1 /* 2 暴力:也是暴力过了,无语.无向图,两端点都要加度数和点 3 */ 4 #include <cstdio> 5 #include <algorithm> 6 #include <cstring> 7 #include <vector> 8 #include <cmath> 9 using namespace std; 10 11 typedef long long ll; 12 const int MAXN = 2e2 +

hihoCoder1179 永恒游戏 (图游戏&amp;&amp;暴力)

题目链接:传送门 题意: 一个无向图,每个图有n个节点,m条边,每个点的权值为a[i]. 如果这个点的权值大于他的度数,那么与他相连的点的权值都 可以加1,该点的权值减去他的度数.问这个游戏能否进行100000轮. 分析: 对于一个固定的初始局面,不论怎么操作,要么可以无限操作下去, 要么在相同步数后停在相同的局面上.因此可以直接暴力模拟下. 代码如下: #include <iostream> #include <cstdio> #include <cstring> #

[Usaco2008 Feb]Line连线游戏[暴力][水题]

Description Farmer John最近发明了一个游戏,来考验自命不凡的贝茜.游戏开始的时 候,FJ会给贝茜一块画着N (2 <= N <= 200)个不重合的点的木板,其中第i个点 的横.纵坐标分别为X_i和Y_i (-1,000 <= X_i <=1,000: -1,000 <= Y_i <= 1,000). 贝茜可以选两个点画一条过它们的直线,当且仅当平面上不存在与画出直线 平行的直线.游戏结束时贝茜的得分,就是她画出的直线的总条数.为了在游戏 中胜出,

hihoCoder - #1173 : 博弈游戏&#183;Nim游戏&#183;三

#1173 : 博弈游戏·Nim游戏·三 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 在这一次游戏中Alice和Bob决定在原来的Nim游戏上增加一条规则:每一次行动时,不仅可以选择一堆取走任意数量的石子(至少取1颗,至多取出这一堆剩下的所有石子),还可以选择将一堆石子分成两堆石子,但并不取走石子.比如说有一堆石子为k个,当Alice或者Bob行动时,可以将这一堆石子分成两堆,分别为x,y.满足x+y=k,x,y>0.那么增加了这一条规则后,在Alice总先手的

HihoCoder - 1615矩阵游戏II

矩阵游戏II 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 给定一个NxN的整数矩阵,小Hi每次操作可以选择两列,将这两列中的所有数变成它的相反数. 小Hi可以进行任意次操作,他的目标是使矩阵中所有数的和尽量大.你能求出最大可能的和吗? 输入 第一行一个整数N. 以下N行,每行N个整数Aij. 对于30%的数据,2 ≤ N ≤ 10 对于100%的数据,2 ≤ N ≤ 200, -1000 ≤ Aij ≤ 1000 输出 最大可能的和 样例输入 4 -1 1 1

【hihoCoder】【挑战赛#12】

模拟+枚举+模拟……+构造 QAQAQQQ rank12求杯子! A 顺子 ……模拟题,分类讨论一下就好了……比如当前四张牌是不是同一花色……是不是连续的四张牌,如果是连续的四张牌,是不是两边的……(呀我好像忘了判左边...只判了J Q K A....没判A 2 3 4... 没关系加几个字符就好了……嗯代码已改 1 //hihocoder 12 A 2 #include<vector> 3 #include<cstdio> 4 #include<cstring> 5

Xsolla带你参观2014年韩国游戏展G-Star

G-Star 2014终于到来了,全世界的玩家怀着无比兴奋的心情聚集韩国釜山,来参加全球第四大游戏展. 来韩国釜山的Gstar,与Xsolla一起享受游戏盛宴!? 今年是全球游戏展会十周年,大家都很清楚,今年参展人数又破纪录了.去年一共有1235个企业参加,而今天的数字达到了1397. G-Star开始于2004年,是韩国最大的游戏展会.韩国最大的游戏公司会展现丰富多彩的活动.其中包括Nexon, NCSoft, Smile Gate, Sega,Intel和Konami. Xsolla的展台位

2020.1.2考试总结

T1圆圈游戏 暴力DP有60分,设包含圆i的最小的圆是fa[i],那没最终会的得到一棵树,对于一棵子树,选了根节点就不能选子树内其它点,f[i]=max(w[i],\(\sum f[son]\)). 瓶颈就在怎么建图,因为圆不相交相切,所以扫描线的时候相对位置不会发生改变,用set维护一下就好啦. #include<algorithm> #include<iostream> #include<cmath> #include<queue> #include&l