hihoCoder #1179 : 永恒游戏 (暴力枚举)
题意:
给出一个有n个点的无向图,每个点上有石头数个,现在的游戏规则是,设置某个点A的度数为d,如果A点的石子数大于等于d,则可以从A点给每个邻接点发一个石子。如果游戏可以玩10万次以上,输出INF,否则输出最多能玩几次。
思路:
暴力枚举每个可以玩的点,假如可以玩无限次,且当前状态为Z(指所有点的石头数的序列作为一个状态),那么在玩了多次之后,一定会造成循环,也就是说,玩几次之后,每个点的石子数和初始的石子数一模一样,这样子我再重复之前是怎么玩的就可以无限玩了。但是由于有200个点,所以玩一次就去判断是否和初始一样的状态,否则复杂度为 O(100000*结点数*该结点的边数),数量级上亿。
现在只需要枚举10万次就知道结果了,不用去判断其他的。而且每次选择要玩的点都可以任意选,只要满足了条件(并不需要先玩石子数多的,或少的)。
#include <bits/stdc++.h>
#define LL long long
using namespace std;
const int N=;
int n, m, a, b, num[N];
vector< vector<int> > vect;
unordered_set<int> sett; int cal()
{
int cnt=;
for(int i=; i<n; i++) if(num[i]>=vect[i].size()) sett.insert(i); //符合条件
while(!sett.empty())
{
cnt++; //一次
if(cnt>=) return cnt;
int q=*sett.begin();
num[q]-=vect[q].size();
if(num[q]<vect[q].size()) sett.erase(sett.begin()); //这个点已经不能再玩了 for(int i=; i<vect[q].size(); i++) //往邻居加石头
{
int p=vect[q][i]; //栈顶结点所连的点
num[p]++;
if(num[p]>=vect[p].size() ) sett.insert(p);
}
}
return cnt;
} int main()
{
//freopen("e://input.txt", "r", stdin);
scanf("%d%d",&n,&m);
for(int i=; i<n; i++) scanf("%d", &num[i]); //石头数
vect.resize(n);
for(int i=; i<m; i++)
{
scanf("%d%d", &a, &b); //输入边,无向图
vect[a].push_back(b);
vect[b].push_back(a);
} int ans=cal();
if(ans>=) printf("INF\n");
else printf("%d\n",ans); return ;
}
AC代码
hihoCoder #1179 : 永恒游戏 (暴力枚举)的更多相关文章
- hihocoder #1179 : 永恒游戏 暴力
#1179 : 永恒游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://hihocoder.com/problemset/problem/11 ...
- 暴力/图论 hihoCoder 1179 永恒游戏
题目传送门 /* 暴力:也是暴力过了,无语.无向图,两端点都要加度数和点 */ #include <cstdio> #include <algorithm> #include ...
- [bzoj1610][Usaco2008 Feb]Line连线游戏_暴力枚举
Line连线游戏 bzoj-1610 Usaco-2008 Feb 题目大意:Farmer John最近发明了一个游戏,来考验自命不凡的贝茜.游戏开始的时 候,FJ会给贝茜一块画着N (2 <= ...
- hdu1172猜数字(暴力枚举)
猜数字 Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submi ...
- nyoj Wythoff Game(暴力枚举)
Wythoff Game ms | KB 描写叙述 近期ZKC同学在学博弈,学到了一个伟大的博弈问题--威佐夫博弈. 相信大家都学过了吧?没学过?没问题.我将要为你讲述一下这个伟大的博弈问题. ...
- CodeForces 742B Arpa’s obvious problem and Mehrdad’s terrible solution (暴力枚举)
题意:求定 n 个数,求有多少对数满足,ai^bi = x. 析:暴力枚举就行,n的复杂度. 代码如下: #pragma comment(linker, "/STACK:1024000000 ...
- 2014牡丹江网络赛ZOJPretty Poem(暴力枚举)
/* 将给定的一个字符串分解成ABABA 或者 ABABCAB的形式! 思路:暴力枚举A, B, C串! */ 1 #include<iostream> #include<cstri ...
- HNU 12886 Cracking the Safe(暴力枚举)
题目链接:http://acm.hnu.cn/online/?action=problem&type=show&id=12886&courseid=274 解题报告:输入4个数 ...
- 51nod 1116 K进制下的大数 (暴力枚举)
题目链接 题意:中文题. 题解:暴力枚举. #include <iostream> #include <cstring> using namespace std; ; ; ch ...
随机推荐
- acdream1116 Gao the string!(扩展KMP)
今天是字符串填坑的一天,首先填的第一个坑是扩展KMP.总结一下KMP和扩展KMP的区别. 在这里s是主串,t是模式串. KMP可以求出的是以s[i]为结尾的串和 t前缀匹配的最长的长度.假如这个长度是 ...
- codeforces 439D Devu and Partitioning of the Array(有深度的模拟)
题目 //参考了网上的代码 注意答案可能超过32位 //要达成目标,就是要所有数列a的都比数列b的要小或者等于 //然后,要使最小的要和最大的一样大,就要移动(大-小)步, //要使较小的要和较大的一 ...
- POJ 1936
#include<iostream> #include<string> using namespace std; int main() { //freopen("ac ...
- Oracle MySQL
http://blog.jobbole.com/46510/ http://blackproof.iteye.com/blog/1570456 http://blog.csdn.net/yzsind/ ...
- Linux网络编程1——小端模式与大端模式
数据存储优先顺序的转换 计算机数据存储有两种字节优先顺序:高位字节优先(称为大端模式)和低位字节优先(称为小端模式).内存的低地址存储数据的低字节,高地址存储数据的高字节的方式叫小端模式.内存的高地址 ...
- GSM、3G、LTE、4G
3GPP(The 3rd Generation Partnership Project)3GPP的目标是实现由2G网络到3G网络的平滑过渡,保证未来技术的后向兼容性,支持轻松建网及系统间的漫游和兼容性 ...
- Cloudinsight Agent install script
#!/bin/bash # Cloudinsight Agent install script. set -e logfile="ci-agent-install.log" gis ...
- CentOS6.x 64位下mysql5.5.25安装图解教程
查看当前安装的linux版本 命令:lsb_release -a 如下图所示 通过上图中的数据可以看出安装的版本为CentOS release 6.3,所以我们需要下载CentOS release 6 ...
- SQL Server ->> 关于究竟ALTER INDEX ... REBUILD会不会导致改变索引选项和Filegroup的验证
其实之前做过类型的验证,不过影响不是特别深,只是记得不会改变DATA COMPRESSION,那今天再次遇到这个问题就再拿出来验证一下.随便写个脚本验证下.ALTER INDEX ... REBUIL ...
- 图像分类之特征学习ECCV-2010 Tutorial: Feature Learning for Image Classification
ECCV-2010 Tutorial: Feature Learning for Image Classification Organizers Kai Yu (NEC Laboratories Am ...