poj 1062 비 싼 예물 (dijkstra 최 단 길)
12458 단어 dijkstra
값 비 싼 예물
Time Limit: 1000MS
Memory Limit: 10000K
Total Submissions: 36799
Accepted: 10616
Description
젊 은 탐험가 가 인디언 부족 에 왔 다.그곳 에서 그 는 추장 의 딸 과 사랑 에 빠 져 추장 에 게 청혼 을 했다.추장 은 그 에 게 만 개의 금 화 를 예물 로 달라 고 해서 야 딸 을 그 에 게 시집 보 내 겠 다 고 대답 했다.탐험 가 는 이렇게 많은 금 화 를 꺼 내지 못 하고 추장 에 게 요 구 를 낮 춰 달라 고 부탁 했다.추장 은 "응, 대사 제의 가죽 저고리 만 구 해 주면 8000 금화 만 구 해 줄 수 있어. 수정 구 를 구 해 오 면 5000 금화 면 돼." 라 고 말 했다. 탐험 가 는 대사 제 에 게 달 려 가 가죽 저고리 나 수정 구 를 요구 했다. 대사 제 는 금화 로 바 꿔 달라 고 하거나 다른 물건 을 구 해 오 면 가격 을 낮 출 수 있 었 다.탐험 가 는 다른 곳 으로 달 려 가 비슷 한 요 구 를 하거나 금화 로 바 꾸 거나 다른 물건 을 찾 으 면 가격 을 낮 출 수 있다.하지만 탐험 가 는 더 낮은 가격 을 받 지 못 하기 때문에 다양한 물건 으로 바 꿀 필요 가 없다.탐험 가 는 이제 최소한 의 금화 로 마음 에 드 는 사람 을 얻 을 수 있 도록 당신 의 도움 이 필요 합 니 다.그리고 그 가 너 에 게 알려 주 고 싶 은 것 은 이 부락 에서 등급 관념 이 매우 삼엄 하 다 는 것 이다.지위 격차 가 일정한 제한 을 초과 한 두 사람 사이 에는 거래 를 포함 한 어떠한 형식의 직접적인 접촉 도 하지 않 는 다.그 는 외지인 이기 때문에 이런 제한 을 받 지 않 아 도 된다.그러나 그 가 어떤 지위 가 낮은 사람과 거래 를 했다 면 지위 가 높 은 사람 은 더 이상 그 와 거래 하지 않 을 것 이다. 그들 은 이것 이 간접 적 인 접촉 과 같 고 반대로 도 마찬가지 라 고 생각한다.그래서 모든 상황 을 고려 한 후에 그 에 게 가장 좋 은 방안 을 제공 해 야 한다.
편 의 를 위해 우 리 는 모든 물품 을 1 부터 번 호 를 매기 고 추장 의 승낙 도 하나의 물품 으로 간주 하 며 번 호 는 항상 1 이다.모든 물품 은 해당 하 는 가격 P, 주인의 지위 등급 L, 그리고 일련의 대체 품 Ti 와 해당 대체 품 에 대응 하 는 '혜택' Vi 가 있다.두 사람의 지위 등급 격차 가 M 을 넘 으 면 '간접 거래' 가 불가능 하 다.탐험 가 는 최소한 얼마의 금화 가 필요 해 야 추장 의 딸 을 얻 을 수 있 는 지 이 데 이 터 를 근거 로 계산 해 야 한다.
Input
첫 줄 을 입력 하면 두 개의 정수 M, N (1 & lt; = N & gt; = 100) 으로 지위 등급 차이 제한 과 아 이 템 의 총 수 를 순서대로 나타 낸다.이 어 번호 에 따라 어 릴 때 부터 차례대로 N 개의 아 이 템 에 대한 설명 을 했다.각 아 이 템 의 설명 은 처음에 세 개의 비 마이너스 정수 P, L, X (X < N) 로 이 아 이 템 의 가격, 주인의 지위 등급 과 대체 품 총 수 를 순서대로 나타 낸다.그 다음 에 X 줄 은 각 줄 에 두 개의 정수 T 와 V 를 포함 하여 각각 대체 품 의 번호 와 '우대 가격' 을 나타 낸다.
Output
수출 에 최소 필요 한 금화 수 입 니 다.
Sample Input
1 4
10000 3 2
2 8000
3 5000
1000 2 1
4 200
3000 2 1
4 200
50 2 0
Sample Output
5250
Source
저장 성
제목 대의: (1) 입력 을 map [] [] 로 전환 합 니 다. 그 중에서 송금 점 t 를 추가 하면 모든 아 이 템 이 송금 점 t 와 연결 되 고 권한 수 치 는 혜택 이 없 는 상황 에서 의 금화 수 입 니 다.
(2) 탐험가 가 M 범위 내 에서 만 거래 할 수 있 고 M 범위 에 추장 의 등급 이 포함 되 어야 한 다 는 것 을 분석 했다.
(3) 문제 의 의 미 를 만족 시 키 는 범위 에 대해 dijkstra 알고리즘 이 가장 짧 은 경 로 를 찾 았 다.
(4) 모든 경로 에서 두 점 의 등급 차 이 는 반드시 제한 안에 있어 야 한다.
이것 은 아주 간단 한 템 플 릿 문 제 는 아니 지만, 각 세부 사항 에 주의 하면 된다.
코드 참조
1 #include <iostream>
2 #include <cstdio>
3 using namespace std;
4 int vis[105],map[105][105],node[105],Min,n,w;
5 const int INF=99999999;
6
7 int dijkstra()
8 {
9 for(int i=1; i<=n; i++)
10 {
11 node[i]=map[0][i];
12 }
13 for (int k=1; k<=n; k++)
14 {
15 Min=INF;
16 for (int i=1; i<=n; i++)
17 if (!vis[i])
18 {
19 if (Min>node[i])
20 {
21 Min=node[i];
22 w=i;
23 }
24 }
25 vis[w]=1;
26 for (int i=1; i<=n; i++)
27 if (!vis[i])
28 if (node[i]>map[w][i]+node[w])
29 node[i]=map[w][i]+node[w];
30
31 }
32 return node[1];
33 }
34
35 int main ()
36 {
37 int m,l[105];
38 while (cin>>m>>n)
39 {
40 for (int i=1; i<=n; i++)
41 {
42 node[i]=INF;
43 for (int j=1; j<=n; j++)
44 map[i][j]=INF;
45 }
46 int MM=INF;
47 for (int i=1; i<=n; i++)
48 {
49 int p,x;
50 cin>>p>>l[i]>>x;
51 while (x--)
52 {
53 int t,v;
54 cin>>t>>v;
55 map[t][i]=v;
56 }
57 map[0][i]=p;
58 }
59 for (int i=1; i<=n; i++)
60 {
61 int lv=l[i];
62 //l[i]+m l[i]
63 for (int j=1; j<=n; j++)
64 {
65 if (l[j]>=lv&&l[j]<=lv+m)
66 vis[j]=0;
67 else
68 vis[j]=1;
69 }
70 int s=dijkstra();
71 MM=min(s,MM);
72 }
73 printf ("%d
",MM);
74 }
75 return 0;
76 }
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[백준]#11779 최소비용 구하기 2n(1≤n≤1,000)개의 도시가 있다. 그리고 한 도시에서 출발하여 다른 도시에 도착하는 m(1≤m≤100,000)개의 버스가 있다. 우리는 A번째 도시에서 B번째 도시까지 가는데 드는 버스 비용을 최소화 시키려고...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.