备考7级中,P10110求条(问灌佬多)
  • 板块灌水区
  • 楼主jinshengzhe
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/11/28 23:15
  • 上次更新2024/11/29 10:40:33
查看原帖
备考7级中,P10110求条(问灌佬多)
675772
jinshengzhe楼主2024/11/28 23:15
#include<bits/stdc++.h>
using namespace std;
#define endl "\n";
#define int long long

int n, m, x, y, a[100005], ans = 9e18, sum;
vector<int> g[100005];

void dfs(int u, int fa)
{
	if(u == y)
	{
		ans = min(ans, sum);
		sum -= a[u] - a[fa] + 1;
		return;
	}
	for(int i = 0; i < g[u].size(); i++)
	{
		int v = g[u][i];
		if(v <= u)
			continue;
		sum += a[v] - a[u] + 1;
		dfs(v, u);
		if(v != y)
			sum -= a[v] - a[u] + 1;
	}
	return;
}

signed main()
{
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin >> n >> m >> x >> y;
	x++;
	y++;
	for(int i = 1; i <= n; i++)
		cin >> a[i];
	while(m--)
	{
		int u, v;
		cin >> u >> v;
		u++;
		v++;
		g[u].push_back(v);
	}
	dfs(x, 0);
	if(ans == 9e18)
	{
		cout << "No solution" << endl;
		return 0;
	}
	cout << ans << endl;
	return 0;
}

rt

2024/11/28 23:15
加载中...