社区讨论

19分求助

P1938[USACO09NOV] Job Hunt S参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mhja46n8
此快照首次捕获于
2025/11/03 23:12
4 个月前
此快照最后确认于
2025/11/03 23:12
4 个月前
查看原帖
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;

const int N = 1e5 + 10;
int d, p, c, f, s;
struct node{
	int v, w;
	friend bool operator<(node a, node b){
		return a.w < b.w;
	}
};
vector<node> g[N];
int dis[N];
bool vis[N];
priority_queue<node> q;
void dijkstra(int s){
	memset(dis, -0x3f3f3f3f, sizeof dis);
	dis[s] = d;
	q.push({s, d});
	for(int i = 1; i <= c; i++){
		int p = -1;
		while(!q.empty()){
			int v = q.top().v;
			//cout << v << endl;
			q.pop();
			if(!vis[v]){
				p = v;
				break;
			}
		}
		if(p == -1) return;
		vis[p] = true;
		for(auto j : g[p]){
			int v = j.v;
			int w = j.w;
			if(!vis[v] && dis[p] + w > dis[v]){
				dis[v] = dis[p] + w;
				q.push({v, dis[p] + w});
			}
		}
	}
}

signed main(){
	cin >> d >> p >> c >> f >> s;
	for(int i = 1, a, b; i <= p; i++){
		cin >> a >> b;
		g[a].push_back({b, d});
	}
	for(int i = 1, u, v, w; i <= f; i++){
		cin >> u >> v >> w;
		g[u].push_back({v, -w + d});
	}
	dijkstra(s);
	int ans = -0x3f3f3f3f;
	for(int i = 1; i <= c; i++){
		ans = max(ans, dis[i]);
	}
	cout << ans << endl;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...