(AtCoder Beginner Contest 345) ---- F - Many Lamps -- 题解

news2024/9/24 13:24:04

F - Many Lamps

题目大意:

        

思路解析:

        对于每个线只有三种情况 

(1) 一个城市亮着灯,另一个城市没亮灯,此时选择这条线路,灯的点亮数不变

(2) 两个城市未亮灯,选择此线路,亮灯数加2

(3)两个城市都亮着灯,选择此线路,亮灯数减2

那么我们可以发现我们无论组合都没法使亮着的灯变为偶数,那么如果我们已知一个灯为亮,此时选择这条线路,要么能使亮灯数增加,要么无变化,那么只要 当前亮灯数小于目标亮灯数就可以选择这条线路,因为这是个无向有环图,所以每遍历一个点做一次记录就好,只遍历没有标记过的点。

这样深搜时,只要有答案便能找到答案。

代码实现:

import java.io.*;
import java.math.BigInteger;
import java.util.*;

public class Main {
    static long inf = (long) 2e18;
    static int N;
    static int[] vis;
    static LinkedList<Integer> ans;
    static Vector<Node>[] g;
    static int[] lamp;
    static int res = 0;
    static int K;

    public static void main(String[] args) throws IOException {
        N = f.nextInt();
        int M = f.nextInt();
        K = f.nextInt();
        g = new Vector[N+1];
        lamp = new int[N+1];
        vis = new int[N+1];
        ans = new LinkedList<>();
        for (int i = 0; i < N + 1; i++) {
            g[i] = new Vector<>();
        }
        for (int i = 1; i <= M; i++) {
            int x = f.nextInt();
            int y = f.nextInt();
            g[x].add(new Node(y, i));
            g[y].add(new Node(x, i));
        }
        for (int i = 1; i <= N; i++) {
            if (vis[i] == 0)
                dfs(i);
        }
        if (res != K){
            w.println("No");
        }else {
            w.println("Yes");
            w.println(ans.size());
            for (Integer o : ans) {
                w.print (o + " ");
            }

        }
        w.flush();
        w.close();
        br.close();
    }
    public static void dfs(int x){
        vis[x] = 1;
        for (int i = 0; i < g[x].size(); i++) {
            Node cur = g[x].get(i);
            int id = cur.id;
            int y = cur.to;
            if (res == K) return;
            if (vis[y] == 1) continue;
            dfs(y);
            if(lamp[y] == 0 && res < K){
                res -= lamp[x] + lamp[y];
                lamp[x] ^= 1;
                lamp[y] ^= 1;
                res += lamp[x] + lamp[y];
                ans.add(id);
            }

        }
    }

    public static class Node{
        int to;
        int id;
        public Node(int to, int id){
            this.to = to;
            this.id = id;
        }
    }

    static PrintWriter w = new PrintWriter(new OutputStreamWriter(System.out));
    static Input f = new Input(System.in);
    static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));

    static class Input {
        public BufferedReader reader;
        public StringTokenizer tokenizer;

        public Input(InputStream stream) {
            reader = new BufferedReader(new InputStreamReader(stream), 32768);
            tokenizer = null;
        }

        public String next() {
            while (tokenizer == null || !tokenizer.hasMoreTokens()) {
                try {
                    tokenizer = new StringTokenizer(reader.readLine());
                } catch (IOException e) {
                    throw new RuntimeException(e);
                }
            }
            return tokenizer.nextToken();
        }

        public String nextLine() {
            String str = null;
            try {
                str = reader.readLine();
            } catch (IOException e) {
                // TODO 自动生成的 catch 块
                e.printStackTrace();
            }
            return str;
        }

        public int nextInt() {
            return Integer.parseInt(next());
        }

        public long nextLong() {
            return Long.parseLong(next());
        }

        public Double nextDouble() {
            return Double.parseDouble(next());
        }

        public BigInteger nextBigInteger() {
            return new BigInteger(next());
        }
    }
}

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

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

相关文章

UNI-APP读取本地JSON数据

首先要把json文件放在static文件夹下 然后在要读取数据的页面导入 import data from ../../static/data.json读取数据&#xff1a; onLoad() {console.log(data, data)}, 打印出来的就是JSON文件里的数据了

简介:网络数据中心和数字孪生系统融合

前言 云服务器是在云中提供可扩展的计算服务&#xff0c;避免了使用传统服务器时需要预估资源用量及前期投入的情况。云服务器支持用户自定义一切资源&#xff1a;cpu、内存、硬盘、网络、安全等等&#xff0c;并可在访问量和负载等需求发生变化时轻松地调整它们。云服务器为业…

你需要来自XXX的权限才能对此文件夹进行更改”的解决方法

使用 Windows PowerShell(管理员)(A) 强制删除文件 快捷键 winx 调出如下界面,点击 Windows PowerShell(管理员)(A) 1、定位到要删除的文件夹所在目录&#xff0c;例如E盘下的abc文件夹 执行命令 cd Set-Location -Path "E:\Program Files\abc" 2、给要删除的文件夹…

鸿蒙Harmony应用开发—ArkTS-ForEach:循环渲染

ForEach基于数组类型数据执行循环渲染。 说明&#xff1a; 从API version 9开始&#xff0c;该接口支持在ArkTS卡片中使用。 接口描述 ForEach(arr: Array,itemGenerator: (item: Array, index?: number) > void,keyGenerator?: (item: Array, index?: number): string …

eth 交易案例分析9

交易hash: 先用0.26eth买入了多个GPT&#xff0c;然后用这多个GPT 在uniswap3 兑换了1.69 个eth&#xff0c; 疑问点&#xff1a;买入的 DLP 什么意思&#xff1f;

C++初阶---类和对象

目录 1. 类的引入 2. 类的定义 4. 类的访问限定符及封装 4.1 访问限定符 4.2 封装 5. 类的作用域 6.类的实例化 7.类对象模型 8. this指针 8.1 this指针的引出 8.2 this指针的特性 8.3 C语言和C实现栈的对比 9.类的六个默认成员函数 10&#xff0c;构造函数 10.1…

Penpad 生态资产 $PDD LaunchPad 在即,Season 2 规则解读

Penpad是Scroll上的LauncPad平台&#xff0c;该平台继承了Scroll底层的技术优势&#xff0c;并基于零知识证明技术&#xff0c;推出了系列功能包括账户抽象化、灵活的挖矿功能&#xff0c;并将在未来实现合规为RWA等资产登录Scroll生态构建基础。该平台被认为是绝大多数项目、资…

IM系统设计之消息存储

IM系统设计之消息存储 项目地址&#xff1a;gitgithub.com:muyixiaoxi/Link.git 消息存储结构 消息存储结构如下图所示 当用户A向用户B发送一条消息时 将消息发送给 serverserver 将消息进行持久化判断用户B是否在线&#xff0c;如果在线直接转发&#xff1b;如果离线&am…

蓝桥杯-单片机基础8——上下位机的串口通信设置(附小蜜蜂课程代码)

蓝桥杯单片机组备赛指南请查看这篇文章&#xff1a;戳此跳转蓝桥杯备赛指南文章 本文章针对蓝桥杯-单片机组比赛开发板所写&#xff0c;代码可直接在比赛开发板上使用。 型号&#xff1a;国信天长4T开发板&#xff08;绿板&#xff09;&#xff0c;芯片&#xff1a;IAP15F2K6…

经得住拷问的HTTPS原理解析

此文涵盖的大致内容&#xff1a; 理解HTTPS原理的概念什么是对称加密和非对称加密&#xff1f;什么是数字签名&#xff1f;怎么生成&#xff1f;怎么校验&#xff1f;啥时候是对称加密&#xff1f;啥时候是非对称加密&#xff1f;啥时候进行算法加密&#xff1f;什么算法&…

【SpringCloud】Consul中数据持久化配置并注册为Windows服务

Consul用起来两个比较麻烦的地方: 一是每次都需要执行打开命令行执行 consul agent -dev 命令来启动Consul服务,而且不能关掉命令行.另外一点就是在Consul中设置的数据,每次重启之后就没了. 就很烦.因此为大家带来解决上述问题的方法 首先要在官网下载Consul安装包的解压目录下…

每日一题 --- 设计链表[力扣][Go]

设计链表 题目&#xff1a;707. 设计链表 你可以选择使用单链表或者双链表&#xff0c;设计并实现自己的链表。 单链表中的节点应该具备两个属性&#xff1a;val 和 next 。val 是当前节点的值&#xff0c;next 是指向下一个节点的指针/引用。 如果是双向链表&#xff0c;则…

C++生成动态连接库

文章目录 一、静态连接与动态连接二、 动态链接库&#xff08;DLL&#xff09;的创建三、dll库的使用四、 动态链接链接库工作原理五、extern "C" 一、静态连接与动态连接 静态库和动态库区别是库的加载时间不同。静态库&#xff1a;在链接阶段库将会与.o目标文件一起…

【redis】服务器架构演进

架构演进 单机架构应用数据分离架构应⽤服务集群架构读写分离 / 主从分离架构冷热分离架构垂直分库微服务架构 单机架构 所有的应用服务、业务所需的数据、业务处理等都在一台服务器上。 在初期&#xff0c;用户访问量很少&#xff0c;对服务器的的性能和安全没有很高的要求&am…

docker入门(一)—— docker概述

docker 概述 docker 官网&#xff1a;http://www.docker.com 官网文档&#xff1a; https://docs.docker.com/get-docker/ Docker Hub官网&#xff1a;https://hub.docker.com &#xff08;仓库&#xff09; 什么是 docker docker 是一个开源的容器化平台&#xff0c;可以…

盛最多水的容器——算法思路

题目链接&#xff1a;11. 盛最多水的容器 - 力扣&#xff08;LeetCode&#xff09; 题解&#xff1a; while中的主要步骤解释&#xff1a; 首先判断索引 i 处的高度是否小于索引 j 处的高度&#xff0c; 如果小于则计算 ( j - i ) * height [ i ]&#xff1b;&#xff08;先取…

有哪些强大好用的AI表格数据处理工具或者 AI Excel工具?

在繁忙的工作和生活中&#xff0c;处理大量的表格数据往往令人感到头疼。面对一列列数字、一行行文字&#xff0c;我们需要花费大量的时间和精力去整理、核对。然而&#xff0c;随着科技的飞速发展&#xff0c;人工智能&#xff08;AI&#xff09;技术正逐渐改变这一现状。 如…

C# 对App.config、Web.config的appSettings节点数据进行加密

appSettings加密原因&#xff0c;就是因为容易暴露服务器账号和密码&#xff0c;而且客户也不允许 使用ASP.NET提供的命令工具aspnet_regiis来创建加密命令&#xff1b;aspnet_regiis是提供了直接对配置文件加密的功能的&#xff1b;并且使用aspnet_regiis加密的配置节点在读取…

uniapp套壳打包成apk

不管是vue项目还是uniapp项目,只要能打包成 index.html都可以通过uniapp打包成apk 1.首先把这个项目发布到线上 拿百度举例: 发布到百度服务器用 www.baidu.com能访问到 2.然后到uniapp上发布项目用默认的 vue2,如果你的项目是vue3也用vue2 3.废话我觉得说太多了,直接…

被群辉升级折腾得够呛

群辉升级后&#xff0c;因为版权问题&#xff0c;VideoStation 不支持播放 EAC3 格式的视频了&#xff0c;导致我大量视频都没法用 AppleTV 播放。 网上早期流传了各种方案&#xff0c;比如回退 VideoStation 版本等&#xff0c;都试过了&#xff0c;没啥用。 2024 年 3 月&a…