题目链接:
Solution:
本题首先把每个请求拆点,然后我们只需要判断时间限制,再来连边就行了
注意给出的\(f,t\)两个矩阵都是在空载情况下的定义
Code:
#include#define inf 1926081700using namespace std;const int N=211;int n,m,k,edt,cnt=1,S,T;int head[N<<1],f[N][N],t[N][N];struct Edge{int nxt,to,v,w;}edge[N*N<<1];struct airline{int st,ed,t0,t1,c;}p[N];void ins(int x,int y,int v,int w){ edge[++cnt].nxt=head[x]; edge[cnt].to=y;edge[cnt].v=v; edge[cnt].w=w;head[x]=cnt;}namespace Network_Flow{ queue q; int delta,maxcost; int vis[N<<1],dis[N<<1],pre[N<<1]; int spfa(){ pre[T]=0,delta=inf; memset(vis,0,sizeof(vis)); memset(dis,0x3f,sizeof(dis)); q.push(S),dis[S]=0,vis[S]=1; while(!q.empty()){ int x=q.front();q.pop();vis[x]=0; for(int i=head[x];i;i=edge[i].nxt){ int y=edge[i].to; if(edge[i].v&&dis[x]+edge[i].w