Submission #1347658

#TimeUsernameProblemLanguageResultExecution timeMemory
1347658mikasa통행료 (APIO13_toll)C++20
0 / 100
163 ms8580 KiB
#include<bits/stdc++.h>
using namespace std;
#define debug(n,m) cout<<"["<<#n<<"]->"<<n<<m
#define int long long
#define all(x,off) x.begin()+off,x.end()
#define pb push_back 

const int N=1e6+10;
const int inf=9e17;
const int mod=1e9+7;

vector<int> g[N];
vector<int> tr[N];
int p[N],cur[N];
int dis[11][11];

void dfs(int u,int p=-1) {
  cur[u]=::p[u];
  for (int v:tr[u]) {
    if (v==p) continue;
    dfs(v,u);
    cur[u]+=cur[v];
  }
}

int l,r;
bool isn(int u,int v){
  if (u>v) swap(u,v);
  return u==l&&v==r;
}

void levi() {
  int n,m,k;
  cin>>n>>m>>k;
  for (int i=1;i<=m;++i) {
    int x,y,w;
    cin>>x>>y>>w;
    g[x].push_back(y);
    g[y].push_back(x);
    dis[x][y]=dis[y][x]=w;
  }
  cin>>l>>r;
  if (l>r) swap(l,r);
  g[l].pb(r);
  g[r].pb(l);
  for (int i=1;i<=n;++i) {
    cin>>p[i];
  }


  auto eval = [&](int k) -> int {
    //set<array<int,2>> se;
    vector<int> d(n+1,inf);
    vector<int> to(n+1,0);
    dis[l][r]=dis[r][l]=k;
    d[l]=0;
    vector<int> vis(n+1,0);
    for (int i=1;i<=n;++i) {
      int v=-1;
      for (int j=1;j<=n;++j) {
        if (!vis[j]&&(v==-1||(d[j]<d[v]))) v=j;
      }
      vis[v]=1;
      for (int u:g[v]) {
        if (vis[u]) continue;
        int w=dis[u][v];
        if (w<d[u]||(w==d[u]&&isn(u,v))) {
          d[u]=w;
          to[u]=v;
        }
      } 
    }
    for (int i=2;i<=n;++i) tr[to[i]].pb(i),tr[i].pb(to[i]);
    dfs(1);
    //debug(cur[3],' ');
    if (l==to[r]) return cur[r]*k;
    if (r==to[l]) return cur[l]*k;
    return 0;
 };
  int res=0;
  for (int i=1;i<=(int)1e6;++i) {
    for (int i=1;i<=n;++i) tr[i].clear();
    res=max(res,eval(i));
    //if (res==450 ) debug(i,' ');
  }
  cout<<res<<'\n';
}

int32_t main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);int tt=1;//cin>>tt;
  while (tt--) levi();
}

/*


*/
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...