# | 제출 시각 | 아이디 | 문제 | 언어 | 결과 | 실행 시간 | 메모리 |
---|---|---|---|---|---|---|---|
21908 | 2017-04-26T21:50:06 Z | iletavcioski | Cities (BOI16_cities) | C++14 | 249 ms | 14440 KB |
#include<iostream> #include<vector> #include<queue> #include<cstdio> using namespace std; typedef long long ll; bool oznaceni[100001]; struct node { int a,b; ll val; }; const bool operator <(const node &x,const node&y) { return x.val>y.val; } vector<int> p(100001,-1); vector<int> d(100001,0); int dsu(int a) { if(p[a]==-1) return a; return dsu(p[a]); } void dsu1(int a,int b) { if(p[a]!=b) { dsu1(p[a],b); p[a]=b; } else return; } vector<vector<pair<int,ll> > > v; pair<ll,bool> dfs(int x,int prev) { ll brojac=0; bool cc=false; for(int i=0;i<v[x].size();i++) { if(v[x][i].first==prev) continue; pair<ll,bool> p=dfs(v[x][i].first,x); if(p.second) { brojac+=(p.first+v[x][i].second); cc=true; } } if(oznaceni[x]) cc=true; return make_pair(brojac,cc); } using namespace std; int main() { int n,k,m; scanf("%d%d%d",&n,&k,&m); int pp=-1; vector<pair<int,ll> > vec; v.insert(v.begin(),n+1,vec); for(int i=0;i<k;i++) { int a; scanf("%d",&a); a--; pp=a; oznaceni[a]=true; } priority_queue<node> pq; for(int i=0;i<m;i++) { int a,b,c; scanf("%d%d%d",&a,&b,&c); a--; b--; node g; g.a=a; g.b=b; g.val=(ll)c; pq.push(g); } while(!pq.empty()) { node g=pq.top(); pq.pop(); int a=g.a; int b=g.b; int aa=a; int bb=b; a=dsu(a); b=dsu(b); if(a==b) continue; else { v[aa].push_back(make_pair(bb,g.val)); v[bb].push_back(make_pair(aa,g.val)); if(d[a]>d[b]) { d[b]++; p[a]=b; dsu1(aa,b); } else { d[a]++; p[b]=a; dsu1(bb,a); } } } cout<<dfs(pp,-1).first<<endl; return 0; }
Compilation message
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Correct | 0 ms | 2904 KB | Output is correct |
2 | Correct | 0 ms | 2904 KB | Output is correct |
3 | Incorrect | 0 ms | 2904 KB | Output isn't correct |
4 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 239 ms | 14440 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 0 ms | 3036 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 249 ms | 14440 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |
# | 결과 | 실행 시간 | 메모리 | Grader output |
---|---|---|---|---|
1 | Incorrect | 246 ms | 14440 KB | Output isn't correct |
2 | Halted | 0 ms | 0 KB | - |