Portal --> Nowcoder197D

Solution

  所以说这是一道==纯粹的人类智慧题是这样吗qwq

​  一开始的时候想sg函数qwq然后发现。。好像根本不能拆成独立的子游戏嘛qwq

  

  换一个角度来思考:首先考虑一下这个图的性质

  因为这是一个简单无向图,然后除了起点和终点以外没有度数\(>2\)的点,也就是说不可能出现走到一个点之后出现分叉路这样的情况,更加具体一点就是:这个图中从\(1\)到\(n\)的路径都是互不相交的

  注意到因为每次操作都是\(-1\),所以不管怎么操作一定能够得到一个这样的局面:只剩下一条从\(1\)到\(n\)的路径,并且这条路径上的每条边的边权都是\(1\),因为必须要进行一次操作,所以碰上这种局面的那个人必败

  这个时候我们就可以得到一个比较直接的策略了:两个人都要尽可能地避免自己碰上种局面(为了方便表述,后面将这种只剩一条全\(1\)路的局面称为“结束局面”),也就是说,要尽早将自己会遇上的可能成为这种局面的\(1\)到\(n\)的路径断掉,断掉一条\(1\)到\(n\) 路径的最少操作次数为这条路径上的边权最小值,所以我们要做的就是,找出每条从\(1\)到\(n\)的路径,判断如果最后剩下的那条全是\(1\)的路是这条的话,会是谁要进行操作(也就是判断这条路径对谁来说必败),然后将断掉这条路径所需的的最少次数加到对应的那个人的统计变量中,最后只要判断一下两个统计变量的大小,就可以知道是谁先破坏完自己的必败路径了(也就是对方的必胜路径),先破坏完的那个人就是有必胜策略的

  最后的问题就是如何判断一条路径对谁来说必败:注意到一个比较明显但是又很容易忽略的性质(比如说我就忽略了==),因为每次操作的时候都是\(-1\),所以先手操作完之后剩余边权之和与原边权和的奇偶性是不同的,后手操作完之后则一定是相同的,如果说一条路径是“结束局面”中剩的那条路径,那么这条路径包含的边的数量就是该局面的边权之和(因为根据定义结束局面中所有的边权都是\(1\)),所以我们可以直接通过这个以及一开始还没有进行任何操作时总的边权和的奇偶性来判断,如果奇偶性相同说明会是后手碰上,否则是先手碰上

  然后因为这题对图的约束,边数什么的不会很多,\(1\)到\(n\)的路径总数也不会很多,所以我们直接爆搜一下统计一下就好了

  

  mark:尝试从奇偶性的角度分析问题的时候。。不妨想一下剩余局面,比如说这题就是:先手操作完之后剩余边权之和与原边权和的奇偶性是不同的,后手操作完之后则一定是相同的

  

  

​  代码大概长这个样子

#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;
const int N=1e5+10,inf=2147483647;
struct xxx{
int y,nxt,dis;
}a[N*2];
int h[N];
ll cnt[2];
int n,m,tot;
ll sum;
void add(int x,int y,int d){a[++tot].y=y; a[tot].nxt=h[x]; h[x]=tot; a[tot].dis=d;}
void dfs(int pre,int x,int who,int mn){
int u;
if (x==n){
cnt[who]+=mn; return;
}
for (int i=h[x];i!=-1;i=a[i].nxt){
u=a[i].y;
if (i==(pre^1)) continue;
dfs(i,u,who^1,min(mn,a[i].dis));
}
} int main(){
#ifndef ONLINE_JUDGE
freopen("a.in","r",stdin);
#endif
int x,y,z;
scanf("%d%d",&n,&m);
memset(h,-1,sizeof(h));
tot=1; sum=0;
for (int i=1;i<=m;++i){
scanf("%d%d%d",&x,&y,&z);
add(x,y,z);
add(y,x,z);
sum+=z;
}
dfs(0,1,0,inf);
--sum;
if (cnt[sum&1]>cnt[sum&1^1]) printf("Yes\n");
else printf("No\n");
}

【Nowcoder】玩游戏的更多相关文章

  1. 牛客练习赛46 C 华华跟奕奕玩游戏 (期望,概率)(详解)

    链接:https://ac.nowcoder.com/acm/contest/894/C 来源:牛客网 华华跟奕奕玩游戏 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 524288K ...

  2. 原生JS实战:写了个一边玩游戏,一边记JS的API的游戏

    本文是苏福的原创文章,转载请注明出处:苏福CNblog:http://www.cnblogs.com/susufufu/p/5878913.html 本程序[一边玩游戏,一边记JS的API]是本人的个 ...

  3. bzoj4730: Alice和Bob又在玩游戏

    Description Alice和Bob在玩游戏.有n个节点,m条边(0<=m<=n-1),构成若干棵有根树,每棵树的根节点是该连通块内编号最 小的点.Alice和Bob轮流操作,每回合 ...

  4. 小易邀请你玩一个数字游戏,小易给你一系列的整数。你们俩使用这些整数玩游戏。每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字。 例如: 如果{2,1,2,7}是你有的一系列数,小易说的数字是11.你可以得到方案2+2+7 = 11.如果顽皮的小易想坑你,他说的数字是6,那么你没有办法拼凑出和为6 现在小易给你n个数,让你找出无法从n个数中选取部分求和

    小易邀请你玩一个数字游戏,小易给你一系列的整数.你们俩使用这些整数玩游戏.每次小易会任意说一个数字出来,然后你需要从这一系列数字中选取一部分出来让它们的和等于小易所说的数字. 例如: 如果{2,1,2 ...

  5. cdoj 1136 邱老师玩游戏 树形背包

    邱老师玩游戏 Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.uestc.edu.cn/#/problem/show/1136 Desc ...

  6. win7系统玩游戏不能全屏的解决办法

    1.修改注册表中的显示器的参数设置   Win键+R键,打开运行窗口,输入regedit回车,这样就打开了注册表编辑器,然后,定位到以下位置:   HKEY_LOCAL_MACHINE\SYSTEM\ ...

  7. 【用PS3手柄在安卓设备上玩游戏系列】连接手柄和设备

    背景 硬件要求1:PS3 手柄 + 手柄配套的USB线 硬件要求2:已经获得 ROOT 权限并且支持蓝牙的安卓设备 软件要求1:Sixaxis Compatibility Checker PS3 手柄 ...

  8. UESTC_邱老师玩游戏 2015 UESTC Training for Dynamic Programming<Problem G>

    G - 邱老师玩游戏 Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others) Submi ...

  9. 【特殊的图+DP】【11月校赛】大家一起玩游戏

    大家一起玩游戏 Time Limit : 2000/1000ms (Java/Other)   Memory Limit : 65536/32768K (Java/Other) Total Submi ...

  10. 洛谷 P4705 玩游戏 解题报告

    P4705 玩游戏 题意:给长为\(n\)的\(\{a_i\}\)和长为\(m\)的\(\{b_i\}\),设 \[ f(x)=\sum_{k\ge 0}\sum_{i=1}^n\sum_{j=1}^ ...

随机推荐

  1. PHP精确到毫秒秒杀倒计时实例

    精确到毫秒秒杀倒计时PHP源码实例,前台js活动展示倒计时,后台计算倒计时时间.每0.1秒定时刷新活动倒计时时间. PHP: // 注意:php的时间是以秒算.js的时间以毫秒算 // 设置时区 da ...

  2. day09,10 函数

    一.函数 什么是函数 函数: 对代码块和功能的封装和定义 定义一个事情或者功能. 等到需要的时候直接去用就好了. 那么这里定义的东西就是一个函数. 语法: def 函数名(形参): 函数体 函数名(实 ...

  3. AndroidStudio引入AAR依赖

    title: AndroidStudio引入AAR依赖 date: 2016-08-10 00:25:57 tags: [aar] categories: [Tool,Gradle] --- 概述 本 ...

  4. USACO 1.2.3 Name That Number 命名那个数字(打开文件)

    Description 在威斯康辛州牛大农场经营者之中,都习惯于请会计部门用连续数字给母牛打上烙印.但是,母牛用手机时并没感到这个系统的便利,它们更喜欢用它们喜欢的名字来呼叫它们的同伴,而不是用像这个 ...

  5. Alpha阶段第2周/共2周 Scrum立会报告+燃尽图 02

    此次作业要求参见 [https://edu.cnblogs.com/campus/nenu/2018fall/homework/2285] Scrum master:祁玉 一.小组介绍 组长:王一可 ...

  6. Beta阶段中间产物

    空天猎功能说明书:https://git.coding.net/liusx0303/Plane.git 空天猎代码控制:https://coding.net/u/MR__Chen/p/SkyHunte ...

  7. 第一次c++作业(感觉不是很好系列)

    日常先贴github的地址 https://github.com/egoistor/Elevator-scheduling 然后我觉得学习了半天,构造函数似懂非懂(用的是class自动生成的构造函数, ...

  8. C++ Primer Plus学习:第七章

    C++入门第七章:函数-C++的编程模块 函数的基本知识 要使用C++函数,必须完成如下工作: 提供函数定义 提供函数原型 调用函数 库函数是已经定义和编译好的函数,可使用标准库头文件提供原型. 定义 ...

  9. ci事务

    CI框架百问百答:CodeIgniter的事务用法?--第9问 时间 2013-06-06 10:57:45  CSDN博客 原文  http://blog.csdn.net/haor2756/art ...

  10. Saltstack(二)

    承接上篇博客 配置管理 haproxy的安装部署 创建相关目录 # 创建配置目录 [root@linux-node1 ~]# mkdir /srv/salt/prod/pkg/ [root@linux ...