Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #define NguyenDangQuan the_author
- #include <bits/stdc++.h>
- #define all(x) x.begin(),x.end()
- #define mset(x, i) memset(x,i,sizeof(x))
- #define elif else if
- #define heap priority_queue
- #define fi first
- #define se second
- #define pb push_back
- #define ld long double
- #define ll long long
- #define ull unsigned long long
- #define task "VUONTRE"
- using namespace std;
- int typetest;
- template<class T>
- void read(T &x){
- register int c;
- T neg = 1;
- x = (T)0;
- while ((c = getchar()) <= 47 || c >= 58)
- if(c == '-') neg = -1;
- for (; (c > 47 && c < 58); c = getchar()){
- x = (x << 3) + (x << 1) + (T)(c - 48);
- }
- x *= neg;
- }
- inline void fastIOfileinput(){
- ios_base:: sync_with_stdio(0);
- cin.tie(0);
- cout.tie(0);
- freopen(task".INP", "r", stdin);
- freopen(task".OUT", "w", stdout);
- // freopen(task".in", "r", stdin);
- // freopen(task".out", "w", stdout);
- typetest = 0;
- }
- struct quan{
- int id, w;
- quan() {}
- quan(int u, int v){
- id = u;
- w = v;
- }
- bool operator < (const quan& a) const{
- return w > a.w
- ||(w == a.w && id > a.id);
- }
- };
- const int N = 1e5 + 2;
- vector<quan> ke[N];
- set<int> tre;
- int n;
- int minn = 1e8, pos;
- void Enter(){
- cin >> n;
- while(n--){
- char a, b;
- int v;
- cin >> a >> b >> v;
- if(a >= 'A' && a <= 'Z'){
- tre.insert(a - 'A' + 1);
- a = a - 'A' + 'a';
- }
- if(b >= 'A' && b <= 'Z'){
- tre.insert(b - 'A' + 1);
- b = b - 'A' + 'a';
- }
- ke[a - 'a' + 1].pb(quan(b - 'a' + 1, v));
- ke[b - 'a' + 1].pb(quan(a - 'a' + 1, v));
- }
- }
- void dijkstra(int x){
- heap<quan, vector<quan> > s;
- bool free[50];
- mset(free, 0);
- s.push(quan(x, 0));
- free[x] = 1;
- while(s.size()){
- quan c = s.top();
- s.pop();
- if(c.id == 'z' - 'a' + 1){
- if(minn > c.w){
- minn = c.w;
- pos = x;
- }
- return;
- }
- for(int i = 0; i < ke[c.id].size(); ++i){
- if(!free[ke[c.id][i].id]){
- free[ke[c.id][i].id] = 1;
- s.push(quan(ke[c.id][i].id, c.w + ke[c.id][i].w));
- }
- }
- }
- }
- void solve(){
- for(set<int>::iterator i = tre.begin(); i != tre.end(); ++i){
- dijkstra(*i);
- }
- cout << char(pos + 'A' - 1) << " " << minn;
- }
- signed main(){
- fastIOfileinput();
- if(typetest){
- int t;
- cin >> t;
- while(t--){
- Enter();
- solve();
- }
- }
- else{
- Enter();
- solve();
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement