제출 #1300865

#제출 시각아이디문제언어결과실행 시간메모리
1300865Muhammad_AneeqAutobus (COCI22_autobus)C++20
70 / 70
393 ms1760 KiB
#include <bits/stdc++.h>
using namespace std;
#define int long long
int const N=72;
vector<pair<int,int>>nei[N]={};
int dp[N][N]={};
int ans[N][N];
int n,m;
int lm;
void bfs(int s)
{
	for (int i=1;i<=n;i++)
		for (int j=0;j<=n;j++)
			dp[i][j]=1e12;
	dp[s][0]=0;
	priority_queue<vector<int>,vector<vector<int>>,greater<vector<int>>>pq;
	pq.push({0,0,s});
	while (pq.size())
	{
		vector<int>f=pq.top();
		pq.pop();
		int u=f[2],w=f[0],k=f[1];
		if (dp[u][k]!=w) continue;
		for (auto [i,w1]:nei[u])
		{
			if (k+1<=lm&&dp[i][k+1]>w+w1)
			{
				dp[i][k+1]=w+w1;
				pq.push({dp[i][k+1],k+1,i});
			}
		}
	}
	for (int i=1;i<=n;i++)
	{
		int mn=1e18;
		for (int j=0;j<=n;j++)
		{
			mn=min(mn,dp[i][j]);
		}
		if (mn==1e12)
			continue;
		ans[s][i]=mn;
	}
}
inline void solve()
{
	cin>>n>>m;
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=n;j++)
		{
			dp[i][j]=1e12;
			ans[i][j]=-1;
		}
		dp[i][i]=0;
		ans[i][i]=0;
	}
	for (int i=0;i<m;i++)
	{
		int a,b,t;
		cin>>a>>b>>t;
		dp[a][b]=min(dp[a][b],t);
	}
	for (int i=1;i<=n;i++)
	{
		for (int j=1;j<=n;j++)
		{
			if (dp[i][j]!=1e12&&dp[i][j])
				nei[i].push_back({j,dp[i][j]});
		}
	}
	int k,q;
	cin>>k>>q;
	lm=k;
	lm=min(lm,n);
	for (int i=1;i<=n;i++)
		bfs(i);
	while (q--)
	{
		int a,b;
		cin>>a>>b;
		cout<<ans[a][b]<<'\n';
	}
}
signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    int t=1;
    for (int i=1;i<=t;i++)
    {
        solve();
    }
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...