미 단 b [프로 그래 밍 문제] 배달 2
6061 단어 미 단
n 개의 점 m 조 는 가장자리 에 있 는 그림 에 q 개의 배 송 수요 가 있 습 니 다. 필요 한 설명 형식 은 (s i, t i, l i, r i) 입 니 다. 즉, 점 s 가 필요 합 니 다.i 배달 ti, 시각 li 이후 (l i 포함) si 화물 수령, 시간 ri 이전 (r i 포함) t 전송i, 모든 임 무 는 한 번 만 완성 하면 됩 니 다.그림 의 모든 변 은 변 권 이 있 고 권 가 는 배달 원 이 이 변 을 통 해 소모 하 는 시간 을 대표 한다.시간 0 시 에 배 송 원 한 명 이 시 1 분 에 최대 몇 개의 배 송 임 무 를 완수 할 수 있 는 지 부탁 했다.전체 과정 에서 우 리 는 음식 을 찾 는 시간 과 마지막 으로 사용자 에 게 음식 을 배달 하 는 시간 (실제 장면 에서 이 두 시간 은 생략 할 수 없다) 을 무시 하고 거리 에 걸 리 는 시간 만 고려 했다.또 한 지점 에 머 무 를 수 있다.입력 설명: 첫 번 째 줄, 세 개의 정수 n, m, q (2 ≤ n ≤ 0, 1 ≤ m ≤ 400, 1 ≤ q ≤ 10).다음 m 행, 줄 당 3 개의 정수 ui , v_i , c_i (1 ≤ u i, v i ≤ n, 1 ≤ c i ≤ 20000), ui ~ vi 소모 시간 은 ci 의 방향 이 있다.다음 q 줄, 줄 당 네 개의 정수 si , t_i , l_i , r_i (1 ≤ s i, t i ≤ n, 1 ≤ l i ≤ r i ≤ 10 ^ 6), 배 송 퀘 스 트 를 설명 합 니 다.
출력 설명: 최대 수행 할 수 있 는 작업 의 수 를 나타 내 는 정수 입 니 다.
입력 예: 5, 4, 3, 1, 2, 1, 2, 3, 3, 4, 1, 4, 5, 1, 2, 3, 1, 2, 3, 3, 4, 3, 4, 3, 4, 4.
출력 예: 2
이 문 제 는 먼저 읽 어야 한다. 가장 중요 한 것 은 임 무 는 한 사람 이 완성 하 는 것 이 아니 라 한 길에서 여러 개의 임 무 를 받 을 수 있 는 문 제 를 서 너 번 잘못 읽 었 다 는 것 이다. 마지막 으로 데 이 터 를 봐 야 알 수 있다. 원래 문 제 는 한 사람 이 여러 개의 임 무 를 맡 을 수 있다 는 뜻 이다.
#include
using namespace std;
int flo[100][100];
int tag[100];
int w[100];
int n,m,q;
int maxs;
int sse=0;
struct node
{
int x,y,l,r;
}d[100];
void bfs(int s,int t,int v)
{
//sse++;
//if(sse>5000000) return ;
if(t>maxs) maxs=t;
int x,y,l,r, ts;
//cout<
for(int i=0;i//
{
if(w[i]||tag[i]) continue;
x=d[i].x;
y=d[i].y;
l=d[i].l;
r=d[i].r;
ts=flo[v][x];
int k=max(s+ts,l);
tag[i]=1;
for(int j=0;jif(d[j].rif(k<=r) bfs(k,t,x);
tag[i]=0;
}
for(int i=0;i//
{
if(w[i]||!tag[i]) continue;
x=d[i].x;
y=d[i].y;
l=d[i].l;
r=d[i].r;
ts=flo[v][y];
//int k=max(s+ts,l);
//cout<
if(tag[i]&&s+ts<=r)
{
w[i]=1;
tag[i]=0;
bfs(s+ts,t+1,y);
tag[i]=1;
w[i]=0;
}
}
}
int main()
{
//freopen("in.txt","r",stdin);
while(cin>>n>>m>>q)
{
memset(flo,10000,sizeof(flo));
int x,y,z;
for(int i=1;i<=n;i++) flo[i][i]=0;
for(int i=0;icin >>x>>y>>z;
flo[x][y]=min(flo[x][y],z);
//flo[y][x]=flo[x][y];
}
for(int k=1;k<=n;k++)
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
{
if(flo[i][k]+flo[k][j]//cout<
for(int i=0;icin>>d[i].x>>d[i].y>>d[i].l>>d[i].r;
}
maxs=0;
bfs(0,0,1);
cout<
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
안 드 로 이 드 미 단 드 롭 다운 메뉴(상품 선택)인 스 턴 스 코드바로 효과 그림 에 있 는 ProgressBar 를 불 러 옵 니 다.원형 ProgressBar 는 원생 의 Bar 로 이 루어 질 수 있 지만 스타일 이 단일 합 니 다.예전 에 제 가 이런 효 과 를 하기 전에 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.