noi.ac NA535 【生成树】
因为太蠢一直写T1也没仔细想,赛后发现是个真小清新思维题,本质构造???
首先显然不会无解,这个随随便便证一下就有了
另外给的式子没啥意义,也就能说明颜色随机???害人不浅
然后就从\(1\)开始,钦点颜色为\(0\),然后顺着编号递增判断能不能同色入栈,不能则弹出栈顶元素,如果弹空了则意味着当前点和其他点都有颜色为\(1\)的边,于是这样跑就能得到解,时间复杂度\(\mathcal{O}(n\log n)\)(\(\log\)是因为用了map)
#include<bits/stdc++.h>
#define pii pair<int,int>
#define mk make_pair
#define fi first
#define se second
#define pb push_back
typedef long long ll;
using namespace std;
const int N=5e5+5;
void qread(int &xx){
	xx=0;int ch=getchar();
	while(ch<'0'||ch>'9'){
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		xx=xx*10+ch-'0';
		ch=getchar();
	}
}
void qread(ll &xx){
	xx=0;int ch=getchar();
	while(ch<'0'||ch>'9'){
		ch=getchar();
	}
	while(ch>='0'&&ch<='9'){
		xx=xx*10+ch-'0';
		ch=getchar();
	}
}
map<int,int>G[N];vector<pii>ans[2];stack<int>st;
int n,m,col;long long X,Y,Z,p[N];
int query(int u,int v){
	if(G[u].count(v)){
		return G[u][v];
	}
	return (1LL*(u<v?u:v)*X+1LL*(u>v?u:v)*Y)%Z>=p[u]+p[v];
}
void solve(){
	st.push(1);
	for(int i=2;i<=n;i++){
		while(!st.empty()){
			int u=st.top(),ec=query(u,i);
			ans[ec].pb(mk(u,i));
			if(col^ec){
				st.pop();
			}
			else{
				break;
			}
		}
		if(st.empty()){
			col^=1;st.push(1);
		}
		st.push(i);
	}
}
int main(){
	qread(n);qread(m);
	for(int i=1,u,v,w;i<=m;i++){
		qread(u);qread(v);qread(w);
		G[u][v]=G[v][u]=w;
	}
	qread(X);qread(Y);qread(Z);
	for(int i=1;i<=n;i++){
		qread(p[i]);
	}
	solve();
	for(auto pr:ans[col]){
		printf("%d %d\n",pr.fi,pr.se);
	}
	return 0;
}
												
											noi.ac NA535 【生成树】的更多相关文章
- noi.ac #535 生成树
		
题目链接:戳我 我们考虑按照编号依次加点,然后维护一个栈. 预设生成树的颜色为color. 对于当前点x,如果它和栈首的点连边颜色相同,那么他们的连边可以作为生成树上面的边,点i已经连接,直接brea ...
 - NOI.AC 31 MST——整数划分相关的图论(生成树、哈希)
		
题目:http://noi.ac/problem/31 模拟 kruscal 的建最小生成树的过程,我们应该把树边一条一条加进去:在加下一条之前先把权值在这一条到下一条的之间的那些边都连上.连的时候要 ...
 - # NOI.AC省选赛 第五场T1 子集,与&最大值
		
NOI.AC省选赛 第五场T1 A. Mas的童年 题目链接 http://noi.ac/problem/309 思路 0x00 \(n^2\)的暴力挺简单的. ans=max(ans,xor[j-1 ...
 - NOI.ac #31 MST DP、哈希
		
题目传送门:http://noi.ac/problem/31 一道思路好题考虑模拟$Kruskal$的加边方式,然后能够发现非最小生成树边只能在一个已经由边权更小的边连成的连通块中,而树边一定会让两个 ...
 - NOI.AC NOIP模拟赛 第五场 游记
		
NOI.AC NOIP模拟赛 第五场 游记 count 题目大意: 长度为\(n+1(n\le10^5)\)的序列\(A\),其中的每个数都是不大于\(n\)的正整数,且\(n\)以内每个正整数至少出 ...
 - NOI.AC NOIP模拟赛 第六场 游记
		
NOI.AC NOIP模拟赛 第六场 游记 queen 题目大意: 在一个\(n\times n(n\le10^5)\)的棋盘上,放有\(m(m\le10^5)\)个皇后,其中每一个皇后都可以向上.下 ...
 - NOI.AC NOIP模拟赛 第二场 补记
		
NOI.AC NOIP模拟赛 第二场 补记 palindrome 题目大意: 同[CEOI2017]Palindromic Partitions string 同[TC11326]Impossible ...
 - NOI.AC NOIP模拟赛 第一场 补记
		
NOI.AC NOIP模拟赛 第一场 补记 candy 题目大意: 有两个超市,每个超市有\(n(n\le10^5)\)个糖,每个糖\(W\)元.每颗糖有一个愉悦度,其中,第一家商店中的第\(i\)颗 ...
 - NOI.AC NOIP模拟赛 第四场 补记
		
NOI.AC NOIP模拟赛 第四场 补记 子图 题目大意: 一张\(n(n\le5\times10^5)\)个点,\(m(m\le5\times10^5)\)条边的无向图.删去第\(i\)条边需要\ ...
 
随机推荐
- CentOS下Vim加密解密文本
			
CentOS用vim/vi给文件加密和解密 一. 利用 vim/vi 加密: 优点:加密后,如果不知道密码,就看不到明文,包括root用户也看不了: 缺点:很明显让别人知道加密了,容易让别人把加密的文 ...
 - docker遇到防火墙报错问题解决方法
			
-- 报错信息[root@localhost docker]# docker run -d -p 5000:5000 training/webapp python app.pycc61442060cb ...
 - Flume 概念、模型和特点
			
Flume Event - Flume 事件 - 被定义为一个具有有效荷载的字节数据流和可选的字符串属性集. Flume Agent- Flume - 代理 - 是一个进程承载从外部源事件流到下一个目 ...
 - mysql——修改表名、修改字段名、修改字段数据类型、增加字段、删除字段、修改字段排列位置、修改存储引擎、删除表 (示例)
			
一.创建表和插入数据: ), mz ), bz ) ); ,'sww','sww01'); ,'aww','aww02'); ,'qww','qww03'), (,'eww','eww04'), (, ...
 - 微信多开脚本(Windows,Mac)
			
微信多开 以下内容仅用于学习使用.严禁用于非法用途,违者自负. Windows 多开 Windows 版本的微信在一些比较新的版本好像限制了多开,我们这里提供一个版本(也是官方的).https://p ...
 - Spring(十二)--Spring AspectJ
			
Spring AspectJ AspectJ是一个面向切面的框架,它扩展了Java语言.AspectJ定义了AOP语法,所以它有一个专门的编译器用来生成遵守Java字节编码规范的Class文件. As ...
 - 01:gitbook使用
			
1.1 gitbook介绍 1.gitbook说明 GitBook 使用的markdown语法 在此基础上做了一些 写作便利性的加强 Markdown 是一种轻量级的「标记语言」,优点在于 专注你的文 ...
 - PYQT5 pyinstaller  打包工程
			
win+R 输入cmd 回车 首先安装 pyinstaller : pip install pyinstaller 安装 pywin32: pip install pywin32 在cmd中输入工程 ...
 - JAVA文件类工具
			
FileUtil package cn.jiangzeyin.util.file; import org.springframework.util.Assert; import java.io.*; ...
 - eclipse运行jsp出现404错误怎么办?
			
Window/Show View/Other/Server/Servers/双击“Tomcat v7.0 Server at localhost”在Server Locations配置中选择第二个选项 ...