3713. 【NOI2014模拟6.30】Honor(honor)

Description

小K和同学们期待已久的暑假即将到来。然而小K的班主任兼德育处主任却莫名失踪了一个月。据小道消息,他在高考后才会出现。但现在德育处有诸多繁杂的工作,确定每个班的“三好学生”便是最令人头痛的。

    HY中学的大Boss圆规要求N个班的班主任按照学生的综合素质推荐学生。但他深深地知道,每个班主任都会无一例外地使用xls把M名学生数次月考成绩相加排序,然后从高到底依次录取。圆规知道每个班学生成绩的排序和每个学生得到该荣誉的“负”能量Aij。显然,“负”能量也是有正有负的。他不希望有些学生拿到“三好学生”后依然肆无忌惮地拔掉教室里监控的探头,或是在晚餐时间在篮球场上尽情玩耍(这在HY中学是会被通报批评的)。他希望能够多发扬正能量。

    圆规从不在乎“三好学生”的数量,但是他却不得不考虑学生的感受。学生在学生会上

(1)提出了K条无理的要求,每条要求对于班级u、v,要求班级u的三好学生数量Su和班级v三好学生数量Sv,满足Su-Sv<=w。

(2)提出每个班至少一张奖状。

    鉴于HY中学的高一高二学生在5月下旬某一个酷热的晚上,忍无可忍围起了整栋教学楼,并且齐声高声叫喊:“开空调!”但学校善后处理十分不得力。圆规决定全盘接受学生的建议,以平息学生的怒气。但是,他还是想知道最小的负能量。

Input

第1行 为三个数N、M、K如题意所示。

    第2-N+1行,每行M个数,表示按成绩从高到底排序的每个学生的“负”能量大小。

    第N+2-N+K+1行,每行三个数u、v、w如题意所示。

Output

最小的负能量。

Sample Input

3 4 3

13 -4 -1 -2

1 -2 3 1

-3 4 2 1

2 3 0

3 2 0

1 2 1

Sample Output

7

Data Constraint

20%的数据 n,m<=10;

50%的数据 n,m<=30,K<=500

70%的数据 n,m<=50,K<=2000

100%的数据 n<=900,m<=60,K<=20000,Aij的绝对值小于1000,w<=1000。

Solution

可以转化为网络流模型。

建立源点和汇点,每班第一人从源点连一条inf容量的边,每班每个同学向后一个同学连边,边权为前i个同学的负能量之和。每班最后一个人向汇点同样连这个班所有人的负能量之和。因为要求每个班必须选,因此不能割从源点到第一个人的边,除此之外,每割一条边表示选了这个班的前i个人。对于一个限制条件,班级v最多能比班级u少选w个人。也就是说割了班级u的第i点的边后,班级v的第i-w的点之前的边就都不能割,那么我们从u班的i这个点向v班i-w连一条inf的边即可,最后跑一边最小割就是答案了。

Code

#include<cstdio>
#include<cstring>
#include<algorithm>
#define I int
#define ll long long
#define F(i,a,b) for(I i=a;i<=b;i++)
#define Fd(i,a,b) for(I i=a;i>=b;i--)
#define mem(a,b) memset(a,b,sizeof(a))
#define inf 2147483647
#define N 910
#define M 3100000
using namespace std;

I rd(I &x){
	x=0;I w=1;
	char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-') w=-1;ch=getchar();}
	while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
	x*=w;
}
I n,m,k,tot,mi,S,T,a[N][100],id[N][100],d[N*110],q[N*110],ans,flow;
I t[M],nx[M],l[N*100],s[M];
void add(I x,I y,I z){
	t[++t[0]]=y,nx[t[0]]=l[x],l[x]=t[0],s[t[0]]=z;
	t[++t[0]]=x,nx[t[0]]=l[y],l[y]=t[0],s[t[0]]=0;
}
I bfs(){
	mem(d,0);
	q[1]=S;I i=0,j=1;d[S]=1;
	while(i<j){
		I x=q[++i];
		for(I k=l[x];k;k=nx[k]) if(s[k]&&!d[t[k]]){
			q[++j]=t[k];
			d[t[k]]=d[x]+1;
			if(t[k]==T) return 1;
		}
	}
	return 0;
}
I dinic(I x,I fl){
	if(x==T) return fl;
	I r=fl,st;
	for(I k=l[x];k&&r;k=nx[k]) if(s[k]&&d[t[k]]==d[x]+1){
		st=dinic(t[k],min(r,s[k]));
		if(!st) d[t[k]]=0;
		s[k]-=st;s[k^1]+=st;
		r-=st;
	}
	return fl-r;
}
I main(){
	freopen("honor.in","r",stdin);
	freopen("honor.out","w",stdout);
	rd(n),rd(m),rd(k);
	F(i,1,n){
		F(j,1,m){
			rd(a[i][j]);a[i][j]+=a[i][j-1];
			mi=min(mi,a[i][j]);
			id[i][j]=++tot;
		}
	}
	S=++tot,T=++tot;t[0]=1;
	F(i,1,n){
		add(S,id[i][1],inf);
		F(j,1,m){
			a[i][j]-=mi;
			if(j==m)add(id[i][j],T,a[i][j]);
			else add(id[i][j],id[i][j+1],a[i][j]);
		}
	}
	I x,y,z;
	while(k--){
		rd(x),rd(y),rd(z);
		F(i,1,m) if(i-z) add(id[x][i],id[y][i-z],inf);
	}
	flow=0;
	while(bfs()){
		while(flow=dinic(S,inf)) ans+=flow;
	}
	printf("%d\n",ans+mi*n);
	return 0;
}

 

### Internal Server Error 500 状态码在路径 /v1/wx/honor/customer/service/getHonorUserInfo 的解决方案 HTTP 状态码 500 表示服务器端发生内部错误,通常由多种原因引起。以下是针对路径 `/v1/wx/honor/customer/service/getHonorUserInfo` 出现 Internal Server Error 的可能原因及解决方法。 #### 1. **网关路由配置问题** 如果使用了 API 网关(如 Spring Cloud Gateway 或 Nginx),路径未正确剥离可能导致请求被错误路由。例如,在网关中未正确配置路径剥离规则,导致请求路径被错误传递给后端服务[^1]。 - **解决方案**:检查网关的路由配置,确保路径剥离逻辑正确。对于 Spring Cloud Gateway,可以添加 `strip-prefix` 配置: ```yaml spring: cloud: gateway: routes: - id: service-route uri: http://localhost:8080 predicates: - Path=/v1/wx/honor/customer/service/** filters: - StripPrefix=1 ``` #### 2. **服务端逻辑错误** 服务端代码中可能存在未捕获的异常或逻辑错误,导致返回 500 错误。例如,访问数据库时出现异常但未正确处理[^2]。 - **解决方案**:通过日志文件定位具体错误。确保所有可能抛出异常的代码块都被适当捕获并记录日志。以下是个示例: ```java try { // 数据库查询或其他操作 result = service.getUserInfo(); } catch (Exception e) { logger.error("Error occurred while fetching user info", e); throw new RuntimeException("Internal server error", e); } ``` #### 3. **字符编码问题** 如果服务端或前端页面的字符编码设置不致,可能导致解析错误,从而引发 500 错误。例如,页面从 GB2312 修改为 UTF-8 后未完全同步更新[^2]。 - **解决方案**:统前后端的字符编码设置。确保所有相关文件(如 JSP 页面、HTML 文件)均使用相同的编码格式。例如,在 JSP 页面中添加以下声明: ```jsp <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> ``` #### 4. **依赖包版本冲突** 如果项目中存在依赖包版本冲突,可能导致运行时错误。例如,Spring Cloud Spring Boot 版本不容[^3]。 - **解决方案**:检查项目的依赖管理工具(如 Maven 或 Gradle)配置,确保所有依赖版本容。以下是个 Maven 示例: ```xml <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-dependencies</artifactId> <version>2.7.0</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> ``` #### 5. **资源限制** 服务器资源不足(如内存、CPU)可能导致请求处理失败,从而返回 500 错误。 - **解决方案**:监控服务器资源使用情况,并根据需要优化代码性能或增加硬件资源。例如,使用 `top` 命令查看系统资源占用情况: ```bash top ``` --- ### 示例代码 以下是个简单的 Java 异常捕获示例,用于避免因未处理的异常导致 500 错误: ```java import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class UserService { private static final Logger logger = LoggerFactory.getLogger(UserService.class); public String getUserInfo() { try { // 模拟可能导致错误的操作 return "User Info"; } catch (Exception e) { logger.error("Error occurred while fetching user info", e); return null; } } } ``` --- ### 注意事项 在排查 Internal Server Error 时,建议从以下几个方面入手: - 检查服务器日志文件,获取详细的错误信息。 - 确保所有依赖项已正确安装并容。 - 根据实际需求调整服务器配置参数。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值