首页 > 其他分享 >博弈论做题记录

博弈论做题记录

时间:2024-04-28 13:44:39浏览次数:24  
标签:记录 int 博弈论 cin 先手 add edge 节点

AGC010F Tree Game

Solution:

令 \(a[u]\) 是节点 \(u\) 上的石子数。

感性理解一下:如果当前节点 \(u\) 以及它的唯一子节点 \(v\), 满足 \(a[u] \le a[v]\),那么如果先手向下到 \(v\),后手可以向上走到 \(u\),先手就会被硬控住,导致直接死掉。

所以我们可以猜出一个结论:从一个节点走到 \(a\) 值比他更大的节点是不优的

(然鹅我是做到这里就不会了e)

首先枚举先手把棋子放在哪里,并以该点作为树的根。

由于我们只关心先手赢还是后手赢,所以我们可以令 \(f[u] = 0/1\) 为在只考虑 \(u\) 为根的子树中,且棋子刚好是放在 \(u\) 上时,是先手必胜/必败。

那么 \(f[u] = 1\) 当且仅当有某一个 \(u\) 的子节点 \(v\) 满足 \(a[v] < a[u]\) 且 \(f[v] = 0\).

因为此时先手移动到 \(v\) 上后,后手有两种情况:

  • 向上走到 \(u\) :此时先手再向下走即可。

  • 向下走:由于 \(f[v] = 0\),所以必输。

点击查看代码
#include<bits/stdc++.h>
#define int long long 
using namespace std;

const int N = 3000 + 10;

int n, a[N], f[N];
struct edge{
	int v, next;
}edges[N << 1];
int head[N], idx;

void add_edge(int u, int v){
	edges[++idx] = {v, head[u]};
	head[u] = idx;
} 

bool dfs(int u, int fa){
	for(int i = head[u]; i; i = edges[i].next){
		int v = edges[i].v;
		if(v == fa || a[v] >= a[u]) continue;
		f[u] &= dfs(v, u);
	}
	f[u] ^= 1;
	return f[u];
}

signed main(){
	ios::sync_with_stdio(0);
	cin.tie(0); cout.tie(0);
	cin >> n;
	for(int i = 1; i <= n; i++) cin >> a[i];
	for(int i = 1; i < n; i++){
		int x, y; cin >> x >> y;
		add_edge(x, y); add_edge(y, x);
	}
	for(int i = 1; i <= n; i++){
		for(int j = 1; j <= n; j++) f[j] = 1; 
		if(dfs(i, 0)) cout << i << " ";
	} 
	
	return 0;
} 

标签:记录,int,博弈论,cin,先手,add,edge,节点
From: https://www.cnblogs.com/little-corn/p/18163573

相关文章

  • mysql触发器记录log
    记录指定参数变化https://zhuanlan.zhihu.com/p/439273702DELIMITER//CREATETRIGGERlog_sales_updatesAFTERUPDATEONsalesFOREACHROWInsertintoaudit_log(sales_id,previous_amount,new_amount,updated_by,updated_on)VALUES(NEW.sales_id,OLD.sales_amoun......
  • 记录一次淘宝买到盗版书
    4月13日买的书,买回来就放着了,最近才看,发现是盗版的,当时淘宝搜刚好推在最上面的比较便宜,看好像是家新店以为在促销,就买了一些。昨天读了读发现是盗版就去店铺看了看,发现已经关店,确实了它是盗版。但怎么说呢,它这个盗版质量还是很不错的,除了纸张薄点,没什么其他问题,书页也没有异味,只是......
  • 慢SQL(增删改查)记录
    慢SQL(增删改查)记录 SELECTTOP100(total_elapsed_time/execution_count)/1000N'平均时间ms',total_elapsed_time/1000N'总花费时间ms',total_worker_time/1000N'所用的CPU总时间ms',total_physical_readsN'物理读取总次数',total_logical_reads/e......
  • 2024年 ▇▇▇▇大学嵌入式系 综合实践 全过程记录
    2024年▇▇NU嵌入式系综合实践全过程记录写在结课答辩完成后:这是一门失败的课程,在我们眼中看来,这更像是▇▇▇▇▇▇大学软件工程学院的近年来在本科人才培养改革失败上的集中体现和必然结果。落后于主流的课程设计、古老的实验设备、部分教师的不作为与死板固执、学生不......
  • 记录一些写代码遇到的小错误
    写代码时报错:SyntaxError:Non-UTF-8codestartingwith'\xbc'infileE:\pythonproject\flaskProject2\model\KSql_clean.pyonline5,butnoencodingdeclared;seehttps://peps.python.org/pep-0263/fordetails这个错误通常表示您的Python文件包含非UTF-8编码......
  • 详细:docker手动部署lnmp以及记录遇到的问题
    一、基本思路(背景)部署时间:2024.04.25主机为deepin20.9安装好docker,从官网下载nginxphpmysql三个镜像设置并启动相应三个容器,并配置portainer二、安装docker1.如果以前安装过老版本,请先卸载以前版本sudoaptremovedockerdocker-engine2.安装docker-ce与密钥管理与下......
  • 记录一下怎么保证MQ消费消息去重,消息重试
    先说背景,有消息生产,有很多SQL表名称,对应去统计不同表的数据,更新数量,但是这些消息会重复,可能有很多逻辑都要重复执行,可能会速度慢生产:这是SQL解析,重要的是这段,tableName是枚举里面固定的,图片中有显示RabbitMQSender.sendMessage(MQConfig.FIRST_PAGE_SQL_ROUTINGKEY,table......
  • 记录一下docker desktop windows安装,容器安装等
    安装包下载https://desktop.docker.com/win/main/amd64/Docker%20Desktop%20Installer.exe    docker应用管理工具,选择性安装https://www.rainbond.com/docs/quick-start/quick-installhttps://www.bilibili.com/video/BV1MZ4y1b7wW/?p=2&spm_id_from=pageDriver&......
  • ROS1学习记录(14.0)(古月ROS入门终章:怕什么真理无穷,进一寸有进一寸的欢喜)
    学习视频:21.课程总结与进阶攻略_哔哩哔哩_bilibili   机械臂:     机器人深入书籍:机器人学导论(推荐)   ......
  • ROS1学习记录(13.0)
    学习视频:20.常用可视化工具的使用_哔哩哔哩_bilibili 打开roscore核心先跑起来,再开海龟仿真器,对于qt指令可视化运行可以查看全部指令,方法就是输入rqt_再按两下tab就好先用rqt_console看看,输出日志信息出现问题就会发出一些日志,比如下面的撞墙 下面的HighlightMessages......