jzyz 1225 调查干草

本文介绍了一个关于奶牛Bessie寻找干草的故事背景下的算法问题。Bessie需要走访多个农场,通过构建最小生成树来确定她需要携带的水量,即所有路径中最大边的最小值。文章详细描述了问题的输入输出格式,并提供了一份简洁的C++代码实现,展示了如何使用最小生成树算法解决该问题。

描述 Description
奶牛用完了干草,这是一件必须马上补救的可怕事情. Bessie打算看N (2 <= N <=2,000)个农场(标号为1…N)去调查干草的情况.她将走过一些或全部M (1 <= M <=10,000)条连接着农场长度都不大于1,000,000,000的双向通路.一些农场可能被多条不同通路连接.
Bessie尝试决定她需要的水瓶的大小.她知道她在路上每走一个单位长度需要1个单位的水.因为她可以在每个农场得到更多的水,她只关心最长那条路的长度.她打算把她必须带的水减到最少.
帮Bessie计算她必须带的最多的水:即Bessie 走过最长的路最短,输出这个最小的数.
输入格式 Input Format
*第1行:两个整数用空格隔开:N和M
*第2…M+1行:每一行包括3个数Ai,Bi,Li,表示从Ai农场到Bi农场有条路径长度为Li.
输出格式 Output Format
*第一行:一个整数表示必须经过的最长的路.

题解

emm
跑一遍最小生成树就行了

code

//愉快的放代码 我又水了一篇博客

/*
o              o     ooooo      o            o                  ooooo            oooooooo           ooooooo
oo            oo       o        o            o                 o     o           o      o           o
o o          o o       o        o            o                o       o          o      o           o
o  o        o  o       o        o            o               o         o         oooooooo           o
o   o      o   o       o        o            o               o         o         o                  ooooooo
o    o    o    o       o        o            o               o         o         o                  o
o     o  o     o       o        o            o                o       o          o                  o     
o      oo      o       o        o            o                 o     o           o                  o
o       o      o     ooooo      oooooooooo   oooooooooo         ooooo            o                  ooooooo
*/

#include <algorithm>
#include <cctype>
#include <cmath>
#include <complex>
#include <cstdio>
#include <cstring>
#include <deque>
#include <functional>
#include <list>
#include <map>
#include <iomanip>    
#include <iostream>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>

#define up(i, a, b) for (i = a; i <= b; ++i)
#define down(i, a, b) for (i = a; i >= b; --i)
typedef long long ull;
const int maxn = 1e6 + 1000;
const int inf = 0x3f3f3f3f;

inline int read() {
    int s = 0, w = 1;
    char ch = getchar();
    while (!isdigit(ch)) { if (ch == '-') w = -1; ch = getchar(); }
    while (isdigit(ch)) { s = (s << 1) + (s << 3) + (ch ^ 48); ch = getchar(); }
    return s * w;
}

int n, m;
int ans, num_edge = 0;
int f[maxn];
struct Tree {
    int from, to, dis;
    bool operator<(const Tree &a) const {
        return dis < a.dis;
    }
} t[maxn];

inline int find(int k) {
    return f[k] == k ? k : f[k] = find(f[k]);
} 

int main() {
    n = read(), m = read();
    for (int i = 1; i <= m; ++i) {
        t[i].from = read();
        t[i].to = read();
        t[i].dis = read();
    }
    std::sort(t + 1, t + m + 1);
    for (int i = 1; i <= n; ++i) f[i] = i;
    for (int i = 1; i <= m; ++i) {
        int u = find(t[i].from), v = find(t[i].to);
        if (u == v) continue;
        else f[u] = v;
        if (ans < t[i].dis) ans = t[i].dis;
    }
    printf("%d\n", ans);
    // system("PAUSE");
    return 0;
}
数据库连接失败spring: datasource: type: com.alibaba.druid.pool.DruidDataSource # driverClassName: org.mariadb.jdbc.Driver driverClassName: com.mysql.cj.jdbc.Driver druid: # 主库数据源 master: #test # url: jdbc:mysql://59.110.60.119:3306/WaterQuality # username: mydb # password: 123456 #production # url: jdbc:mysql://114.116.210.210:9527/water_jzyz # username: waterjzyz # password: waterjzyz@890 #使用本地的 # url: jdbc:mysql://8.142.164.112:3306/water_jzyz # username: root # password: root url: jdbc:mysql://localhost:3307/waterquality username: root password: root # # 从库数据源 slave: # 从数据源开关/默认关闭 enabled: false url: username: password: # 初始连接数 initialSize: 5 # 最小连接池数量 minIdle: 10 # 最大连接池数量 maxActive: 20 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 # 配置一个连接在池中最大生存的时间,单位是毫秒 maxEvictableIdleTimeMillis: 900000 # 配置检测连接是否有效 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false webStatFilter: enabled: true statViewServlet: enabled: true # 设置白名单,不填则允许所有访问 allow: url-pattern: /druid/* # 控制台管理用户名和密码 login-username: dllcsoft login-password: dllcsoft filter: stat: enabled: true # 慢SQL记录 log-slow-sql: true slow-sql-millis: 1000 merge-sql: true wall: config: multi-statement-allow: true
最新发布
07-21
<think>嗯,用户遇到了Spring中数据库连接失败的问题,具体报错是com.mysql.cj.jdbc.Driver和DruidDataSource相关。这应该是配置MySQL JDBC驱动时出现的典型问题。 用户可能正在开发Spring Boot项目,使用了Druid连接池和MySQL数据库。从报错信息看,核心问题很可能是驱动类加载失败,常见原因包括:驱动jar包缺失、版本不匹配、类名拼写错误或Druid配置不当。 让我梳理几个关键排查方向: 第一要确认驱动依赖。用户提供的引用[2]提到mysql-connector-java版本问题,这很关键。现在MySQL 8+必须用cj.jdbc.Driver,且版本要匹配。需要检查pom.xml是否正确定义了<mysql.version>属性,比如8.0.28版本示例。 第二检查Druid配置。用户提到DruidDataSource,要特别注意spring.datasource.druid.driver-class-name属性是否显式设置为com.mysql.cj.jdbc.Driver。如果没配置,Druid可能自动加载旧版驱动导致失败。 第三验证连接参数。url里useSSL和时区设置常被忽略,MySQL 8需要显式关闭SSL(useSSL=false)并指定serverTimezone,比如Asia/Shanghai。 第四查看依赖冲突。用户使用Maven可能存在驱动包被覆盖的情况,可以用mvn dependency:tree排查。特别要注意是否同时存在mysql-connector-java和旧版mysql-connector的冲突。 第五检查日志细节。Druid的create connection error会输出具体堆栈,如果提示"Loading class `com.mysql.jdbc.Driver' is deprecated"就肯定是驱动类用错了。 最后想到一个易错点:Spring Boot 2.7+默认不包含数据库驱动,必须显式声明依赖,这点和早期版本不同。 用户可能需要分步操作指导,所以回答里要给出具体配置示例和命令。另外生成的问题要覆盖驱动原理、连接池优化等延伸知识点,帮助用户建立系统认知。</think>### Spring数据库连接失败问题排查指南(com.mysql.cj.jdbc.Driver + Druid) #### 1. **检查MySQL驱动依赖(核心步骤)** ```xml <!-- pom.xml 示例 --> <properties> <java.version>1.8</java.version> <mysql.version>8.0.33</mysql.version> <!-- 推荐最新稳定版 --> </properties> <dependencies> <!-- MySQL驱动 --> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.version}</version> </dependency> <!-- Druid连接池 --> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid-spring-boot-starter</artifactId> <version>1.2.18</version> </dependency> </dependencies> ``` **验证步骤**: 1. 执行 `mvn dependency:tree | grep mysql` 确认驱动版本 2. 检查是否存在版本冲突(如旧版 `mysql-connector-java:5.x`) #### 2. **Druid配置检查(application.yml)** ```yaml spring: datasource: url: jdbc:mysql://localhost:3306/yourdb?useSSL=false&serverTimezone=Asia/Shanghai username: root password: yourpassword driver-class-name: com.mysql.cj.jdbc.Driver # 关键配置 type: com.alibaba.druid.pool.DruidDataSource druid: initial-size: 5 min-idle: 5 max-active: 20 validation-query: SELECT 1 # 连接校验 ``` #### 3. **常见错误原因排查 - **驱动类名错误**: - 正确:`com.mysql.cj.jdbc.Driver`(MySQL 8.0+) - 错误:`com.mysql.jdbc.Driver`(旧版) - **JDBC URL格式问题**: ```diff - jdbc:mysql://localhost:3306/db + jdbc:mysql://localhost:3306/db?serverTimezone=Asia/Shanghai&characterEncoding=utf8 ``` - **依赖冲突**: 检查是否有其他数据源依赖: ```bash mvn dependency:tree | grep -E 'mysql|druid|pool' ``` #### 4. **日志分析关键点 查看错误日志中的 **Caused by** 部分: ``` Caused by: java.lang.ClassNotFoundException: com.mysql.cj.jdbc.Driver ``` 此错误表明驱动类未加载,需检查依赖[^1]。 #### 5. **解决方案流程 ```mermaid graph TD A[连接失败] --> B{检查驱动依赖} B -->|缺失| C[添加mysql-connector-java依赖] B -->|存在| D{检查驱动类名} D -->|错误| E[修改为com.mysql.cj.jdbc.Driver] D -->|正确| F{检查JDBC URL} F -->|时区/SSL问题| G[添加serverTimezone参数] F -->|正确| H{检查Druid配置} H -->|validationQuery缺失| I[配置SELECT 1] H -->|正确| J[查看网络/数据库状态] ``` #### 6. **终极验证代码 ```java // 手动加载驱动测试(仅用于诊断) Class.forName("com.mysql.cj.jdbc.Driver"); try (Connection conn = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test?serverTimezone=UTC", "user", "pass")) { System.out.println("连接成功!"); } ``` #### 引用说明: > [^1]: 当出现 `ClassNotFoundException: com.mysql.cj.jdbc.Driver` 时,表明 JVM 无法加载 MySQL 驱动类,通常由依赖缺失或版本不匹配导致[^1]。 > [^2]: MySQL 8.0+ 必须使用 `cj.jdbc.Driver` 驱动类,且 JDBC URL 需显式指定时区参数(如 `serverTimezone=Asia/Shanghai`)[^2]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值