CSL的训练计划(拓扑排序)

本文介绍了一种利用拓扑排序解决特定问题的算法实现,该算法通过确定入度为0的节点开始,逐步推导出其他节点的值,最终求得满足条件的最大整数k。文中提供了一段完整的C++代码示例。

https://ac.nowcoder.com/acm/contest/551/G

题解

题目保证了不会有环。
一开始唯一能确定的一个点便是入度为0的点,确定了一个点自然而然可以推出其他点。
a 1 + r 1 ∗ k + ( ( a 1 + r 1 ∗ k ) + r 2 ∗ k ) ) + ( ( ( a 1 + r 1 ∗ k ) + r 2 ∗ k ) ) + r 3 ∗ k ) + . . . = s u m a_1+r_1*k+( (a_1+r_1*k)+r_2*k))+(( (a_1+r_1*k)+r_2*k))+r_3*k)+... = sum a1+r1k+((a1+r1k)+r2k))+(((a1+r1k)+r2k))+r3k)+...=sum
k提出来后可以变成k*totval <= tot,k=tot/val
t o t v a l = ∑ 1 n v a l i + r i totval=\sum_{1}^{n} val_i+r_i totval=1nvali+ri

拓扑排序一遍求出val即可。

代码

#include <bits/stdc++.h>
using namespace std;
#define FOR0(a,b) for(int i = a; i < b; ++i)
#define FORE(a,b) for(int i = a; i <= b; ++i)
typedef long long ll;
typedef pair<int,int> pii;
const int maxn = 2e5+5;
int ind[maxn],n,m;
ll s,k, val[maxn];
vector<pii> G[maxn];

void add(int u, int v,int w) {
	G[u].push_back(make_pair(w,v));
}
int vis[maxn];
void solve() {
	queue<int> que;
	for(int i = 1; i <= n; ++i) 
		if(ind[i] == 0) que.push(i);

	int cnt = 0;
	while(!que.empty()) {
		int u = que.front();
		que.pop();
		cnt++;
		for(int i = 0; i < G[u].size(); ++i) {
			int r = G[u][i].first;
			int v = G[u][i].second;		
			val[v] = max(val[v],val[u]+r);
			ind[v]--;
			if(ind[v] == 0) que.push(v);
		}
	}


		ll sum = 0;
		for(int i = 1; i <= n; ++i) sum += val[i];
		//cout << sum << endl;
		if(sum > s) {
			puts("0");
			return;
		}
		if(sum == 0) cout << -1 << endl;
		else cout << (s/sum) << endl;
	
}
int main() {
	scanf("%d%d%lld", &n, &m, &s);
	int u, v, w;
	for(int i = 0; i < m; ++i) {
		scanf("%d%d%d", &u, &v, &w);
		add(u,v,w); ind[v]++;
	}
	solve();
	return 0;
}
### 关于CE-CSL数据集的训练指南 对于CE-CSL数据集,该数据集通常用于手语识别研究。为了有效地训练这一数据集,建议遵循一系列特定的方法和技术来确保模型能够充分学习到必要的特征。 #### 数据准备阶段 首先,访问官方提供的CSL-Daily数据集页面[^1],下载并解压所需的数据文件。这些文件可能包含了视频片段以及对应的标注信息。确保环境配置正确无误之后,可以开始预处理工作,这一步骤涉及到了对原始素材进行清理、分割成适合输入给神经网络的形式,并创建相应的标签列表。 #### 构建模型架构 针对此类任务,卷积神经网络(CNNs)与循环神经网络(RNNs),尤其是长短时记忆(LSTM)单元,在处理序列化视觉模式方面表现优异。一种常见的做法是采用两步法:先利用CNN提取每一帧中的空间特性;再通过RNN/LSTM捕捉时间维度上的变化趋势。下面给出一段简单的PyTorch实现框架作为参考: ```python import torch.nn as nn class SignLanguageModel(nn.Module): def __init__(self): super(SignLanguageModel, self).__init__() # 定义 CNN 层 self.cnn_layers = nn.Sequential( nn.Conv2d(in_channels=3, out_channels=64, kernel_size=(7, 7)), nn.ReLU(), nn.MaxPool2d(kernel_size=(2, 2)), nn.Conv2d(in_channels=64, out_channels=128, kernel_size=(5, 5)), nn.ReLU(), nn.MaxPool2d(kernel_size=(2, 2)) ) # LSTM层设置 self.lstm_layer = nn.LSTM(input_size=..., hidden_size=...) def forward(self, x): batch_size, timesteps, C, H, W = x.size() c_in = x.view(batch_size * timesteps, C, H, W) cnn_out = self.cnn_layers(c_in) r_in = cnn_out.view(batch_size, timesteps, -1) output, (hn, cn) = self.lstm_layer(r_in) return output[-1] ``` 请注意上述代码仅为示意用途,实际应用中需根据具体情况进行调整优化。 #### 训练过程管理 在启动正式训练之前,务必完成超参数调优,比如批次大小(batch size)、初始学习率(learning rate)的选择等。此外,考虑到手语动作具有高度个体差异性和复杂度,适当增加正则化手段有助于防止过拟合现象的发生。同时也要注意监控验证集性能指标的变化情况以便及时作出相应修改措施。 #### 避免常见错误提示 当使用某些数据库管理系统如达梦HS加载字典时可能会碰到`not allow to be master, to be slave`这样的报错消息[^2]。这类警告往往意味着当前实例试图成为主节点却未能成功授权。解决办法之一是在配置文件里指定正确的角色身份或者检查集群状态是否正常运作。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值