技术标签: 深搜广搜 其他图问题 Digi Comp II 拓扑思想 UVALive - 6953
Uva https://icpcarchive.ecs.baylor.edu/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&problem=4965
vjudge https://vjudge.net/problem/UVALive-6953
雾草 一波瞎优化从2000ms跑到800ms.....
题意:给你n(1~10^18)个球 m个点 每个点有一个状态 一个球来过状态就改变 根据当前状态确定下一步(状态左右)
输入 m行 : 初始状态 左子树 右子树
直接模拟会超时
利用拓扑思想 记录入度 然后队列模拟
首先几点必须注意
1.落下偶数小球 状态不变
2.落下奇数小球 状态改变
3.左右子树 可以相同(左右子树描述不确切)
4.入度为零的点可能不只是1节点
详见下代码
#include <algorithm>
#include <iostream>
#include <cstring>
#include <iomanip>
#include <cstdlib>
#include <string>
#include <cstdio>
#include <cmath>
#include <queue>
#include <stack>
#include <ctime>
#include <map>
using namespace std;
#define sf scanf
#define pf printf
#define ll long long
#define For(i,a,b) for(i=a;i<=b;i++)
#define _For(i,a,b) for(i=b;i>=a;i--)
#define Out(x) cout<<x<<endl
#define Outdouble(x,a) cout<<fixed<<setprecision(a)<<1.0*x<<endl
#define mset(arr,num) memset(arr,num,sizeof(arr))
#define ok std::ios::sync_with_stdio(0)
#pragma comment(linker, "/STACK:102400000,102400000")
#pragma GCC optimize("O3")
const ll inf = 1e12+10; ///
const double esp = 1e-7; ///
const int NUM = 1e5+10;
// #define debug
#if defined (debug)
---check---
#endif
/// ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ^_^ ///
struct node
{
ll num;
int dis; ///1表示Left 0表示Right
int l,r;
} arr[5*NUM];
int indeg[5*NUM]; ///存入度
ll n,m; ///long long 把我卡炸了
void bfs()
{
int i,past;
queue <int> q;
For(i,1,m) ///注意 如果某点入度为零也要加进来 因为关系到后面节点的入度--问题
{
if(indeg[i]==0)
{
q.push(i);
}
}
while(!q.empty())
{
past = q.front();
q.pop();
int L = arr[past].l;
int R = arr[past].r;
arr[L].num+=arr[past].num>>1;
arr[R].num+=arr[past].num>>1;
if((arr[past].num&1) == 1) ///如果小球是奇数那么多出来的一个判断分给谁
{
if(arr[past].dis == 1) ///根据父节点来判断当前状态
{
arr[L].num++;
}
else
{
arr[R].num++;
}
arr[past].dis^=1; ///转换状态
} ///当落上珠子和是偶数那么并不会变状态
arr[past].num = 0;
indeg[L]--;
indeg[R]--; ///入度减一 父节点"释放"
if(L!=0 && indeg[L]==0) ///只要不为零,入度为零 那么前面就没有球落进来了 状态就固定了
{
q.push(L);
if(L == R) continue; ///左右孩子相同的情况 记得判断
}
if(R!=0 && indeg[R]==0)
{
q.push(R);
}
}
}
void Output()
{
int i;
For(i,1,m)
{
if(arr[i].dis == 1)
{
pf("L");
}
else pf("R");
}
pf("\n");
}
int main()
{
ok;
char s[5];
int i,j;
while(cin>>n>>m)
{
mset(indeg,0);
mset(arr,0);
For(i,1,m)
{
cin>>s>>arr[i].l>>arr[i].r;
indeg[arr[i].l]++;
indeg[arr[i].r]++; ///记录入度
if(s[0] == 'L')
{
arr[i].dis = 1;
}
else arr[i].dis = 0;
}
arr[1].num = n; ///n个球放在1上
bfs();
Output();
}
return 0;
}
当某个程序创建一个线程后,会产生一个线程的句柄,线程的句柄主要用来控制整个线程的运行,例如停止、挂起或设置线程的优先级等操作。线程句柄与线程ID的区别:●CreateThread() API 用于创建线程。 API 返回同时线程句柄和线程标识符 (ID)。 线程句柄有完全访问权创建线程对象。 运行线程时线程 ID 唯一标识线程在系统级别。●ID是在Windows系统范围内唯一标示Thread的。●Handle是用来操作Thread的,可以有多个,每个HANDLE可以有不同的操作权限,在不同进程O
在我的百度网盘上,含视频,文档,网站参考鸡啄米。地址:https://pan.baidu.com/s/1ggArcRUIblZg-qjLbzhAHA 提取码:ipf9
chrome默认是不可以通过file协议加载文件的,当然,这里这样说不标准,并不是所有的情况都不可以通过file协议加载,比如,写了个本地的html,还是可以加载js,css,图片等资源的。但是在某些情况下通过file协议加载数据,就会报跨域问题。比如目前我遇到以下两种情况:一、学习ES6模块化的时候,加载本地模块,就会报跨域问题,例如,下面的代码:<script src="./aaa.js" type="module"></script>二、加载本地图片,用canvas获取
一、问题描述检查发现2022年5月份的secure日志里混入了2021年10月份的日志信息,很是不解。二、分析出来日志报错:sshd[17263]: Did not receive identification string from 192.168.1.1 #表1.1ssh本地主机建立连接时,返回时出现问题,认证信息丢弃2)查看与绕行相关的日志,发现异常,日志被写入旧的脏数据其中:The imjournal module bellow is now used as a
这个算是竞赛中用到的组合数学里最多的知识点,也是比较难理解的,在被将近一个星期的折磨后总算是理解了一些。其实莫比乌斯反演就只有两个重要的公式,而且用到的最多的也只有一个(其实都差不多),但是需要一些预备知识。莫比乌斯函数,质数线性筛,整除分块,积性函数以及一些其他的数论知识,下面会将其中一部分重要的算法,目录1.莫比乌斯函数2.莫比乌斯函数的线性筛3.整除分块4....
字符字节与编码字符是人们常用的一些记号,比如”1”, “汉”, “お”,”℃”等等,包括各种语系的语言和一些符号都可以被称为字符。 字节是计算机存储数据的存储单元,是一个8位的二进制数,所以最多只能表示256个数字(0-255)。 编码是大家对计算机如何使用字节来表示一个字符的约定,可分为ASCII编码,ANSI编码(本地化编码),UNICODE编码(国际化编码)三种。1.ASCI...
html代码喜马拉雅移动端css代码图片就自行想办法成品展示中间是一个轮播图
问题描述:软件安装编译时,出现以下问题,是ceres库和glog库有问题undefined reference to `google::LogMessageFatal::LogMessageFatal(char const*, int)'../../../Linux-x86_64/libaliceVision_multiview.so.2.2: undefined reference to ...
文件的上传与下载实现首先需要创建一个Web项目,并配置好Tomcat等相关配置,并引入commons-fileupload-1.3.3.jar和commons-io-2.4.jar,如果是maven创建的项目在web.XML中引入依赖commons-fileupload-1.3.3.jarjar下载地址:https://repo1.maven.org/maven2/commons-fileupload/commons-fileupload/1.3.3/commons-fileupload-1.3.3.
本文主要涉及AudioService。还是基于5.1.1版本的代码。 AudioService.java文件位于/framework/base/media/java/android/media/下。音量控制是AudioService最重要的功能之一。先总结一下:AudioService音量管理的核心是VolumeStreamState。它保存了一个流类型所有的音量信息。Volum...
java8 Stream分组求和 reducing