题意:

  给出一个有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代码

最新文章

  1. vs 颜色设置
  2. VirtualBox Win7 虚拟机 共享文件夹设置
  3. IntelliJ IDEA大小写转换快捷键
  4. Java最近版本新特性使用介绍
  5. dump java
  6. mysql命中索引规律
  7. JavaScript之面向对象1
  8. Ajax.BeginForm的异步提交数据 简介
  9. Windows端口转发
  10. NSFileManager创建文件夹
  11. 在windows下详解:大端对齐和小端对齐
  12. VMware15安装MAC(MAC OS 10.13)(OS X 10.14)原版可升级最新可解锁macOS Unlocker3.0(OS X 10.13)
  13. Z370主板的黑苹果usb3.0驱动安装
  14. 【DB2】SQL1585N 由于没有具有兼容页面大小的可用系统临时表空间,因此无法创建临时表。SQLSTATE=54048
  15. java中哪些数值不能被初始化
  16. 使用jQuery的$.ajax()向MVC控制器Post数据
  17. 访问kubernetes ingress-controller
  18. EF中的1:0或1:1关系以及1:n关系
  19. K:有限状态自动机
  20. angularJS1笔记-(7)-控制器的合理使用(显示和隐式的依赖注入)

热门文章

  1. 安装WINCC6.0的步骤
  2. cf div2 239 D
  3. POJ 3484
  4. UITableView中cell的圆角(第一个和最后一个)
  5. SQL技术内幕-12 SQL优化方法论前言
  6. spring_150804_controller
  7. Android 核心分析 之七Service深入分析
  8. Hive常用的SQL命令操作
  9. JavaWeb笔记——三大组件之监听器
  10. sublime3 乱码问题