# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
28611 | 맞왜틀 맞왜틀 신나는노래~ 헤이! 나도한번 불러보자 (#68) | Alternative Mart (FXCUP2_mart) | C++11 | 4143 ms | 154232 KiB |
이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <cstdio>
#include <map>
#include <queue>
#include <set>
#include <algorithm>
std::vector<std::pair<int,int>> G[50010];
std::vector<std::pair<int,int>> CK[50010];
struct node{
int v, id, from;
};
bool operator<(node n1, node n2){
return std::make_pair(-n1.v,n1.from) < std::make_pair(-n2.v,n2.from);
}
int main(){
int N,M,K,Q;
scanf("%d%d%d%d",&N,&M,&K,&Q);
std::priority_queue<node> q;
for(int i =0 ; i< K;i++){
int v;
scanf("%d",&v);
q.push({0,v,v});
}
for(int i = 0; i < M ; i++){
int A,B,C;
scanf("%d%d%d",&A,&B,&C);
G[A].push_back({B,C});
G[B].push_back({A,C});
}
while(q.size() != 0){
auto t = q.top();
q.pop();
if(CK[t.id].size() > 30) continue;
bool flag = false;
for(auto i : CK[t.id]){
if(i.second == t.from) {
flag = true;
break;
}
}
if(flag) continue;
CK[t.id].push_back({t.v,t.from});
for(auto i : G[t.id]){
q.push({t.v+i.second,i.first,t.from});
}
}
for(int i =0 ; i < Q;i ++){
int S, X;
scanf("%d%d",&S,&X);
std::set<int> PC;
for(int j =0; j < X; j++){
int v;
scanf("%d",&v);
PC.insert(v);
}
std::sort(CK[S].begin(),CK[S].end());
for(auto j : CK[S]){
if(!PC.count(j.second)){
printf("%d %d\n",j.second,j.first);
break;
}
}
}
}
컴파일 시 표준 에러 (stderr) 메시지
# | Verdict | Execution time | Memory | Grader output |
---|---|---|---|---|
Fetching results... |