P1636 Einstein学画画

这篇博客介绍了如何利用欧拉回路的概念来解决在无向图中用最少笔画画出所有边的问题。首先,通过读入图的顶点数和边数构建图,然后计算每个顶点的度数。根据欧拉回路的条件,当所有顶点的度数为偶数且图连通时,可以一笔画出所有边。如果存在奇数度的顶点,则需要额外的笔数,计算奇数度顶点数的一半即为所需的笔数。程序实现了这一逻辑,并给出了相应的输入输出示例。

题目描述
Einstein 学起了画画。

此人比较懒~~,他希望用最少的笔画画出一张画……

给定一个无向图,包含 nn 个顶点(编号 1 \sim n1∼n),mm 条边,求最少用多少笔可以画出图中所有的边。

输入格式
第一行两个整数 n, mn,m。

接下来 mm 行,每行两个数 a, ba,b(a \ne ba

=b),表示 a, ba,b 两点之间有一条边相连。

一条边不会被描述多次。

输出格式
一个数,即问题的答案。

输入输出样例
输入 #1复制
5 5
2 3
2 4
2 5
3 4
4 5
输出 #1复制
1
说明/提示
对于 50 %50% 的数据,n \le 50n≤50,m \le 100m≤100。

对于 100%100% 的数据,1 \le n \le 10001≤n≤1000,1 \le m \le {10}^51≤m≤10
5

使用了欧拉回路,计算每个点的度数
欧拉回路的判断:
一个无向图存在欧拉回路,当且仅当该图所有顶点度数都为偶数,且该图是连通图。
否则便是以奇度数顶点数量/2

#include<iostream>
using namespace std;
int a[1010];
int main(){
    int n,m;
    cin>>n>>m;
    for(int i = 0;i < m;i++){
        int x,y;
        cin>>x>>y;
        a[x- 1]++;
        a[y - 1]++;
    }
    int res = 0;
    for(int i = 0;i < n;i++){
        if(a[i]&1)
            res++;
    }
    if(res == 0)
        cout<<1<<endl;
    else
        cout<<res / 2<<endl;
    return 0;
}
**Spring Cloud Stream Applications Einstein SR5**(Service Release 5)是 **Spring Cloud Stream** 生态中预构建的、基于通用消息中间件(如 Kafka、RabbitMQ)的可重用微服务应用集合,属于 **Einstein 版本系列**(对应 Spring Boot 2.1.x 和 Spring Cloud Stream Horsham)。它提供了一组即插即用的 **Source(源)、Processor(处理器)、Sink(接收器)** 应用,用于快速搭建事件驱动的流式数据管道。 --- ### 核心概念 这些应用程序是独立运行的 Spring Boot 微服务,专为与消息中间件集成而设计,典型用途包括: - 将外部系统数据接入消息队列(Source) - 在消息流中进行转换或过滤(Processor) - 将消息写入数据库、文件、HTTP 等目标系统(Sink) > ✅ 示例场景: > `http-source` → `transform-processor` → `kafka-sink` > 或 > `rabbitmq-source` → `filter-processor` → `mongodb-sink` --- ### 版本信息(Einstein SR5) | 组件 | 版本 | |------|------| | Spring Boot | 2.1.x 系列(如 2.1.9.RELEASE) | | Spring Cloud Stream | Horsham.SR5 | | 消息中间件支持 | Kafka 2.0+, RabbitMQ 3.7+ | | 发布时间 | 2019 年底至 2020 年初 | 该版本已归档,建议升级到更新的 **2021.0+(现称 "Bitmonster" 及以后)**。 --- ### 主要模块类型 #### 1. **Sources(数据源)** 从外部系统读取数据并发布到消息中间件。 | Source | 功能 | |--------|------| | `http-source` | 接收 HTTP POST 请求,转发为消息 | | `jdbc-source` | 定时查询数据库表,输出新增/变更记录 | | `file-source` | 监控文件目录变化,发送文件内容 | | `time-source` | 定时生成时间戳消息(如每秒发一条) | | `mqtt-source` | 接入 MQTT 协议设备消息 | ```properties # 示例配置:HTTP Source server.port=8080 spring.cloud.stream.bindings.output.destination=user-events ``` #### 2. **Processors(处理器)** 对消息进行处理后再输出。 | Processor | 功能 | |----------|------| | `transform-processor` | 使用 SpEL 表达式修改消息体 | | `filter-processor` | 条件过滤消息(如 `payload.age > 18`) | | `groovy-processor` | 使用 Groovy 脚本自定义逻辑 | | `router-processor` | 根据条件路由到不同输出通道 | ```yaml # transform-processor 配置示例 spring: cloud: stream: function: definition: transform bindings: transform-in-0: destination: input-topic transform-out-0: destination: output-topic transformer: expression: payload.toUpperCase() ``` #### 3. **Sinks(接收端)** 将消息写入外部系统。 | Sink | 功能 | |------|------| | `log-sink` | 打印消息日志(调试用) | | `mongodb-sink` | 写入 MongoDB 集合 | | `kafka-sink` | 转发到另一个 Kafka 主题 | | `rabbitmq-sink` | 发送到 RabbitMQ 交换机 | | `redis-sink` | 存入 Redis 键值存储 | | `http-sink` | 将消息作为 POST 请求发送到远程服务 | | `jdbc-sink` | 插入或更新数据库记录 | ```yaml # mongodb-sink 示例配置 spring.data.mongodb.uri=mongodb://localhost:27017/events spring.cloud.stream.bindings.input.destination=user-signups spring.cloud.stream.mongodb.time-to-live-ttl=3600 ``` --- ### 快速使用方式 #### 方式一:直接运行 JAR 包(官方发布) 从 [Spring Cloud Stream App Starters](https://github.com/spring-cloud/stream-applications) 获取预编译 JAR: ```bash java -jar http-source-rabbit-2.1.1.RELEASE.jar \ --server.port=9000 \ --spring.cloud.stream.bindings.output.destination=http-input \ --spring.rabbitmq.host=localhost ``` #### 方式二:Docker 启动 ```bash docker run -p 9000:8080 springcloudstream/http-source-kafka:2.1.1.RELEASE \ --spring.cloud.stream.bindings.output.destination=http-input ``` #### 方式三:自定义组合(推荐) 在自己的项目中引入 starter 模块并扩展功能: ```xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-stream-binder-kafka</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-stream-kafka</artifactId> </dependency> ``` 然后定义函数式编程模型: ```java @Bean public Function<String, String> uppercase() { return value -> value.toUpperCase(); } ``` --- ### 注意事项 - 所有应用基于 **函数式编程模型**(`java.util.function.Function`, `Supplier`, `Consumer`),取代旧式的注解驱动。 - 支持通过 `--spring.cloud.stream.bindings.*` 参数动态绑定输入输出目的地。 - 不支持事务性消费或精确一次语义(取决于底层中间件配置)。 - 已停止维护,建议迁移到 **[Spring Cloud Stream Applications 2021.0+](https://github.com/spring-cloud/spring-cloud-stream-applications)**(基于 Spring Boot 2.6+ / 3.x)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值