2024杭电6

news2024/9/21 12:42:46

1001.造花(简单版)

题意:
菊花图:n-1个节点都连接同一节点的树。
给定一棵树,删掉一个节点和连向这个点的所有边,使剩下两个连通块都构成菊花图,问是否可以做到。

题解:
菊花图只有中心节点的度可以没有限制,其余节点的度都是1。
要删除一个节点,要求剩下两个连通块,那就只能删掉度为2的节点,剩下两个菊花图,菊花图最多一个度不是1的节点。
所以度不是1的节点数最多为5,如图。
在这里插入图片描述
所以度不是1的节点数大于5就是不可能。

再枚举删除度为2的节点,判断删除节点后的两个连通图是不是菊花图。
可以找到中心点,判断与中心点连接的点的度是不是都是1,特判只是一个点时也是菊花图。

代码:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=2e5+6;
int p[N];
vector<int>a[N],s; 

void solve()
{
	int n;
	cin>>n;
	int u,v;
	s.clear();
	for(int i=1;i<=n;i++){
		a[i].clear();
		p[i]=0;
	}
	for(int i=1;i<n;i++){
		cin>>u>>v;
		a[u].push_back(v);
		a[v].push_back(u);
		p[u]++;
		p[v]++;
	}

	int f=0;
	for(int i=1;i<=n;i++){
		if(p[i]>=2){
			s.push_back(i);
		}
	}
	if(s.size()>5){
		cout<<"No\n";
		return ;
	}
	int x,y,xx,yy;
	for(auto i:s){
		if(p[i]!=2)continue;
		u=a[i][0];
		v=a[i][1];
		for(auto j:a[i]){
			p[j]--;
		}
		x=1,y=1;
		if(p[u]==1){
			xx=a[u][0];
			yy=a[u][1];
			if(xx!=i)u=xx;
			else u=yy;
		}	
		for(auto j:a[u]){
			if(j==i)continue;
			if(p[j]!=1){
				x=0;
			}
		}
		
		if(p[v]==1){
			xx=a[v][0];
			yy=a[v][1];
			if(xx!=i)v=xx;
			else v=yy;
		}	
		for(auto j:a[v]){
			if(j==i)continue;
			if(p[j]!=1){
				y=0;
			}
		}
		if(x&&y){
			f=1;
			break;
		}
		for(auto j:a[i]){
			p[j]++;
		}
	}
	if(f){
		cout<<"Yes\n";
	}else cout<<"No\n";
}
signed main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr),cout.tie(nullptr);

	int T=1;
	cin>>T;
	while(T--)
		solve();
}

1003.飞车狂飙

题意:
给定一个赛道轨道,L代表左转,R代码右转,S代表直形的轨道。
问轨道是否重叠,如果不重叠是否成环。

题解:
模拟一遍,用map存走过的点,假如重复就是重叠了,没有的话,判断是否成环而且发现相同。

代码:

#include <bits/stdc++.h>
#define int long long
using ll = long long;
using PII = std::array<int, 2>;
using namespace std;
const ll INF = 2E18 + 10;
#ifdef __clang__
    template <typename T>
    inline int my_lg(T n) {return (n > 0) ? static_cast<int>(log2(n)) : -1;}
    #define __lg my_lg
    #define __gcd gcd
#endif
#ifndef ONLINE_JUDGE
    #include "_debug.h"
#endif
// struct cmp{bool operator()(const int & x, const int &y) const{ return x<y;}};
const int N = 2E6 + 10;

PII ds[]={{1,0},{0,1},{-1,0},{0,-1}};

void SINGLE_TEST() 
{
    int n;cin>>n;
    string s;cin>>s;
    map<PII,bool> vis;
    int x=0,y=0;
    int tow=0;
    bool ok1=0,ok2=0;
    for(int i=0;i<n;i++){
        if(s[i]=='R'){
            x+=ds[tow][0];
            y+=ds[tow][1];
            tow--;
            if(tow<0)tow+=4;
        }else if(s[i]=='L'){
            x+=ds[tow][0];
            y+=ds[tow][1];
            tow++;
            tow%=4;
        }else{
            x+=ds[tow][0];
            y+=ds[tow][1];
        }
        if(vis[{x,y}]){
            ok1=1;
        }
        vis[{x,y}]=true;
        // cerr<<x<<" "<<y<<" "<<tow<<"\n";
    }
    if(x==0 && y==0 && tow==0){
        ok2=1;
    }
    if(ok1){
        cout<<-1<<"\n";
    }else if(!ok2){
        cout<<0<<"\n";
    }else{
        cout<<1<<"\n";
    }
}

signed main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr),cout.tie(nullptr);

    int SAMPLES = 1;
    cin >> SAMPLES;
    for(int CUR=1;CUR<=SAMPLES;CUR++){
        SINGLE_TEST();
    }
}

1004.不醒人室

题意:
给定n节课的时间段,m段睡觉的时间段。
睡觉 x x x时间后,会有 2 x 2x 2x的时间不困。
问是否会在上课时间睡觉或者困。

题解:
在上课时间睡觉就是上课时间段,和时间时间段有重合,我们把两个加在一起排序,看是否会有重合部分就行了。
也可以用二分在不困的时间段找到上课时间段,如果每个上课时间段都可以在不困的时间段,而且没有睡觉时间与上课时间重叠就是yes。

代码:

#include<bits/stdc++.h>
using namespace std;
typedef __int128 i128;
typedef long long ll;
typedef double db;

const db PI = acos(-1);
typedef array<ll, 2> PII; // vector<PII> a(n + 1);
const ll inf = 2e18 + 10;
const int mod = 998244353;
const int maxn = 2e5 + 10;
bool multi = 1;


void Solve() {
    ll n, m; cin >> n >> m;
    vector<ll> al(n + 1), ar(n + 1), bl(m + 1), br(m + 1);
    for(ll i = 1; i <= n; i ++ ) {
        cin >> al[i] >> ar[i];
    }
    for(ll i = 1; i <= m; i ++ ) {
        cin >> bl[i] >> br[i];
    }
    ll res = 1, x;
    for(ll i = 1; i <= m; i ++ ) {
        if(br[i] > al[res]) {
            cout << "No\n"; return ;
        }
        if(i < m)
            x = min(br[i] + 2 * (br[i] - bl[i]), bl[i + 1]);
        else 
            x = br[i] + 2 * (br[i] - bl[i]);
        ll pos = lower_bound(al.begin() + res + 1, al.end(), x) - al.begin();
        if(x < ar[pos - 1]) {
            cout << "No\n"; return ;
        }
        res = pos;
    }
    if(res == n + 1)
        cout << "Yes\n";
    else 
        cout << "No\n";
}


signed main() {
    // freopen("test.in","r",stdin);  
    // freopen("code.out","w",stdout);    
    ios::sync_with_stdio(false);
    cin.tie(0); cout.tie(0);
    ll T = 1;
    if(multi) cin >> T;
    while(T -- ) {
        Solve();
    }
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2098260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法练习题07:无重复字符的最长子串

我们可以使用 滑动窗口 的方法来解决这个问题。这是一种高效的算法&#xff0c;能在 O(n) 的时间复杂度内完成任务。以下是具体的解题思路&#xff1a; 1. 滑动窗口的概念 滑动窗口的想法是使用两个指针&#xff08;通常称为左指针 i 和右指针 j&#xff09;来表示一个窗口。…

秋招/春招投递公司记录表格

最近在准备秋招&#xff0c;在各个平台投递秋招简历&#xff0c;什么官网&#xff0c;邮箱&#xff0c;boss&#xff0c;应届生各个平台上&#xff0c;投递的平台比较多&#xff0c;比较乱&#xff0c;因此自己想将这些平台投递记录都收集到一个表格上&#xff0c;所以在腾讯文…

基于Java+MySQL实现在线书店订购系统

一、引言 1.1 编写目的 编写详细设计说明书是软件开发过程必不可少的部分&#xff0c;其目的是为了使开发人员在完成概要设计说明书的基础上完成概要设计规定的各项模块的具体实现的设计工作。同时也是开发人员和最终客户进行需求交流的有效手段。 1.2 背景 开发软件系统名…

数据结构——排序上

1.排序的概念及其运用 1.1排序的概念 排序&#xff1a;所谓排序&#xff0c;就是使一串记录&#xff0c;按照其中的某个或某些关键字的大小&#xff0c;递增或递减的排列起来的操作 稳定性&#xff1a;假定在待排序的记录序列中&#xff0c;存在多个具有相同的关键字的记录&a…

多目标应用:基于自组织分群的多目标粒子群优化算法(SS-MOPSO)的移动机器人路径规划研究(提供MATLAB代码)

一、机器人路径规划介绍 移动机器人&#xff08;Mobile robot&#xff0c;MR&#xff09;的路径规划是 移动机器人研究的重要分支之&#xff0c;是对其进行控制的基础。根据环境信息的已知程度不同&#xff0c;路径规划分为基于环境信息已知的全局路径规划和基于环境信息未知或…

美国海外仓可以用哪家海外仓系统好?

随着全球贸易的增长&#xff0c;美国已经成为了海外仓储业务的一个重要市场。美国海外仓的数量不断增加&#xff0c;竞争也愈加激烈。为应对这种竞争&#xff0c;并优化仓储和供应链管理&#xff0c;WMS&#xff08;仓库管理系统&#xff09;成为了海外仓的重要工具。 一、WMS…

Wx64ST:一款轻松可修改的C语言Shellcode模板

关于windows_x64_shellcode_template windows_x64_shellcode_template简称为Wx64ST&#xff0c;它是一款功能强大的Shellcode模板&#xff0c;该模板基于C语言编写&#xff0c;其简单、可扩展和易于修改等特性可以帮助广大安全研究人员轻松开发适用于Windows x64的Shellcode。…

kali (linux) 安装配置 共享文件夹 samba

一、samba 安装 sudo apt-get install samba 二、启动samba 服务 systemctl enable nmb systemctl enable smb systemctl start nmb systemctl start smb 三、查看 samba状态 systemctl status nmb systemctl status smb 四、创建共享文件夹 &#xff0c;并修改权限 …

技术指南:5分钟零成本实现本地AI知识库搭建

你一定经历过各种通用大模型一本正经胡说八道的时候吧&#xff0c;AI一通丝滑输出让人真假难辨&#xff0c;防不胜防。这种情况被称为AI幻觉。 大模型产生幻觉不幸“翻车”的原因很大程度上是“先天不足”&#xff0c;例如训练时来自特定领域的训练数据就比较缺失或存在偏差等…

20-22 - 打造专业的编译环境

---- 整理自狄泰软件唐佐林老师课程 文章目录 1. 大型项目的编译&#xff08;无第三方库&#xff09;1.1 大型项目的目录结构&#xff08;无第三方库&#xff09;1.2 项目结构设计分析1.3 需要打造的编译环境1.4 解决方案设计 2. 第 1 阶段任务2.1 关键的实现要点2.2 模块 make…

MES管理系统如何提升产品质量与可追溯性

在智能制造的新纪元里&#xff0c;MES管理系统正逐步崭露头角&#xff0c;成为驱动制造业转型升级的幕后英雄。MES管理系统不仅重新定义了生产过程的管理与控制方式&#xff0c;还以数据为驱动&#xff0c;引领着制造业迈向更高效、更智能、更可持续的未来。 智能制造的赋能者&…

U-Mail垃圾邮件过滤网关‍是如何过滤垃圾邮件的?

随着互联网的普及&#xff0c;垃圾邮件已经成为计算机网络安全的又一个公害。因此&#xff0c;反垃圾邮件已经成为互联网应用研究中一个重要课题。为了防止垃圾邮件首先要学会保护自己的邮件地址&#xff0c;避免在网上随意登记和使用邮件地址&#xff0c;预防垃圾邮件骚扰。其…

ALV Tree Control树控件

ALV Tree Control CL_GUI_ALV_TREE 效果&#xff1a; 自定义函数调用&#xff0c;在函数里画屏幕定义树控件显示 FUNCTION ZFI_YSYWLX_HELP_NEW . *"---------------------------------------------------------------------- *"*"本地接口&#xff1a; *&qu…

zset使用lua实现取最高分数中的随机成员

zset使用lua实现取最高分数中的随机成员 这种场景适用队列中不想要先入先出、先入后出因为zset的命令都是带有排序功能的&#xff0c;所以取值时要不从大到小要不从小到大所以我使用lua实现随机取成员使用lua是因为可以保持原子性在执行过程中Lua脚本是不会被其他命令或请求打…

C语言典型例题59

《C程序设计教程&#xff08;第四版&#xff09;——谭浩强》 题目&#xff1a; 例题4.11 译密码。为使电文保密&#xff0c;往往按一定规律将其转换为密码&#xff0c;收报人再按约定的规律将其译回原文。 例如&#xff0c;可以按以下规律将电文变为密码&#xff1a; 将字母A…

我不是非酋之-天空概率

最近入坑了dnf手游&#xff0c;染上了合天空&#xff0c;大黑蛋子一个&#xff0c;突发奇想&#xff0c;模拟下合天空概率&#xff0c;看看是否真的有20%。 梳理代码逻辑如下&#xff1a; 不考虑礼包和其他东西 条件&#xff1a; 合成概率20%&#xff0c;每次需要2个装扮和一个…

格式化的磁盘数据能恢复吗?五个看完即可掌握的恢复方法

磁盘是大多数电子设备都必须具有的一个存储介质&#xff0c;在平时使用的过程中&#xff0c;很多用户为了途一时的方便&#xff0c;经常会需要一键将磁盘里面的数据执行格式化&#xff0c;以实现清空或者删除的情况。然而&#xff0c;在执行完具体的操作后&#xff0c;过了一段…

Vue(十三) 路由、路由嵌套、query、param传参、propos、replace属性。编程式路由导航,特有的生命周期函数,路由守卫

文章目录 路由1. 基本使用2. 多级(嵌套)路由3. 路由query传参4. 命名路由5. 路由param传参6. propos属性7. replace属性8. 编程式路由导航9. 缓存路由组件10. actived&#xff0c;deactived生命周期函数11. 路由守卫1、全局路由2、独享路由3、组件内路由守卫 12. 路由器工作的两…

干货含源码!如何用Java后端操作Docker(命令行篇)

目录 干货含源码&#xff01;如何用Java后端操作Docker&#xff08;命令行篇&#xff09; 一、为什么要用后端程序操作Docker 二、安装Docker 1、安装Docker 2、启动Docker 三、使用Java后端操作docker 1、构建docker镜像并生成容器 2、执行完毕后删除容器和镜像 3、在…