0分求调
查看原帖
0分求调
346410
_1009_楼主2024/5/18 08:56
#include<bits/stdc++.h>
#define f(i,l,r) for(int i=l;i<=r;i++)
#define F if
#define E else
using namespace std;
struct edge
{
	int x1,x2,l,c,v=0;
}e[4010];
int m,s,minn=2147483647;
int read()
{
	int x=0,f=1;
  	char ch=getchar();
	while(ch<'0'||ch>'9')
    {
    	F(ch=='-')
        	f=-1;
    	ch=getchar();
	}
	while(ch>='0'&&ch<='9')
    {
        x=x*10+ch-48;
        ch=getchar();
    }
	return x*f;
}
void find(int cur,int v,int t)
{
	int flg=0;
	F(cur==v)
	{
		minn=min(minn,t);
		return;
	}
	f(i,1,m)
	{
		F(e[i].v==0&&(e[i].x1==cur||e[i].x2==cur))
		{
			F(t+e[i].l<=e[i].c)
			{
				e[i].v=1;
				t+=e[i].l;
				F(e[i].x1==cur)
					find(e[i].x2,v,t);
				E
					find(e[i].x1,v,t);
				t-=e[i].l;
				e[i].v=0;
			}
			E
			{
				F(e[i].l<e[i].c)
				{
					int o=t;
					e[i].v=1;
					t=s+e[i].l;
					F(e[i].x1==cur)
						find(e[i].x2,v,t);
					E
						find(e[i].x1,v,t);
					t=o;
					e[i].v=0;
				}
				E
					return;
			}
			flg=1;
		}
	}
	F(flg==0)
		return;
	return;
}
int main()
{
	int n,q;
	n=read();
	m=read();
	s=read();
	q=read();
	f(i,0,m-1)
	{
		int a=read(),b=read(),l=read(),c=read();
		e[i].x1=a;
		e[i].x2=b;
		e[i].l=l;
		e[i].c=c;
	}
	f(i,1,q)
	{
		int u=read(),v=read(),t=read();
		find(u,v,t);
		cout<<minn<<endl;
		minn=2147483647;
	}
}
2024/5/18 08:56
加载中...