답안 #233405

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
233405 2020-05-20T12:29:16 Z crossing0ver 악어의 지하 도시 (IOI11_crocodile) C++17
0 / 100
9 ms 8192 KB
#include<bits/stdc++.h>
#define ll long long 
#define fi first
#define se second
#include "crocodile.h"
using namespace std;
vector <pair<int,int > > adj[100000];
multiset <ll> IN[100000];
bool vis[100000];
int Ein[100000],v,x;
ll dis[100000],d;
ll val;
struct cmp{
//pair<int,pair<int,int> > a,  b	;
	bool operator() (const  int &a,  const int &b) const {
		if (Ein[a] >= 2 && Ein[b] >= 2)
			return dis[a] <= dis[b];
		return (Ein[a]  >= 2); 
	}
};

int travel_plan(int N, int M, int R[][2], int L[], int K, int P[]) {
	for (int i = 0; i < M; i++) {
		adj[ R[i][0] ].push_back( { L [i], R[i][1] } );
		adj[ R[i][1] ].push_back( { L[i] , R[i][0] });
	}
	fill(dis,dis + 100000,2000000000000000);
	set<int>  s;
	for (int i = 0; i < K; i++) 
		Ein[P[i]] = 2,dis[P[i]] = 0,s.insert (P[i]);
	while (!s.empty()) {
		 v = *s.begin();
		 val = dis[v];
		if (Ein[v] < 2) break;            
		s.erase(s.begin());
		if (vis[v]) continue;
		dis[v] = val;
		vis[v] = 1;
		for (auto i : adj[v]) {
			
			 x = i.se;
			if (vis[x]) continue;
			ll d = i.fi;
			IN[x].insert(dis[v] + d);
			s.erase ( x );
			Ein[x] ++;
			if (IN[x].size() >= 2) {
				auto it = IN[x].begin();
				it++;
				if (dis[x] > *it) {
					dis[x] = *it;
				}
			}
			s.insert (x);
		}
	}
	return dis[0];	
}     /*
main() {               int n,m,k;
	cin >> n >> m >> k;
	int R[m][2],L[m]; for(int i = 0; i < m ; i++ )cin >> R[i][0] >> R[i][1] >> L[i];
	  int P[k]; for (int i = 0 ; i < k ; i++) cin >> P[i];
	travel_plan(n,m,R,L,k,P);
	
}  */
/* 5 4 3
 0 1 2
 0 2 3
 3 2 1
 2 4 4
 1 3 4
 */
# 결과 실행 시간 메모리 Grader output
1 Incorrect 9 ms 8192 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 9 ms 8192 KB Output isn't correct
2 Halted 0 ms 0 KB -
# 결과 실행 시간 메모리 Grader output
1 Incorrect 9 ms 8192 KB Output isn't correct
2 Halted 0 ms 0 KB -