Submission #1348962

#TimeUsernameProblemLanguageResultExecution timeMemory
1348962mikasaToll (APIO13_toll)C++20
16 / 100
273 ms452 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[11];

vector<int>tr[11];

int we[11][11];
int cur[11][11];

int p[11];

int n,m,k;
int l,r;

int dfs(int u,int par) {
  int tot=0;
  for (int v : tr[u]) {
    if (v==par) continue;
    cur[u][v]=cur[v][u]=dfs(v,u);
    tot+=cur[u][v];
  } 
  return tot+p[u];
}

int solve_sub1(int k) {
  we[l][r]=we[r][l]=k;
  vector<int> d(n+1,inf);
  vector<int> vis(n+1,0);
  vector<int> d2(n+1,inf);
  vector<int> vis2(n+1,0);
  vector<int> bes(n+1,0);
  d[1]=0;
  d2[l]=0;
   d2[r]=k;
  int tot=0;
  int tit=0;
  bes[r]=l;
  for (int i=1;i<=n;++i) {
    int v=-1;
    int u=-1;
    for (int j=1;j<=n;++j) {
      if (!vis[j]&&(v==-1||d[j]<d[v])) v=j;
      if (!vis2[j]&&(u==-1||d2[j]<d2[u])) u=j;
    }
    assert(v!=-1);
    // assert(u!=-1);
    vis[v]=1;
    tot+=d[v];
    for (int el : g[v]) {
      if (vis[el]) continue;
      int w=we[v][el];
      if (w<d[el]) {
        d[el]=w;
      }
    }
    if (u==-1) continue;
    tit+=d2[u];
    vis2[u]=1;
    if (u!=l){
      tr[u].pb(bes[u]);
      tr[bes[u]].pb(u);
    }
    for (int el : g[u]) {
      if (vis2[el]) continue;
      if (el==r) continue;
      int w=we[u][el];
      if (w<d2[el]) {
        d2[el]=w;
        bes[el]=u;
      }
    }
  }
  if (tot!=tit) return 0;
  dfs(1,0);
  return cur[l][r]*k;

}

void levi() {
  cin>>n>>m>>k;
  for (int i=1;i<=m;++i) {
    int u,v,w;
    cin>>u>>v>>w;
    g[u].pb(v);
    g[v].pb(u);
    we[v][u]=we[u][v]=w;
  }
  cin>>l>>r;
  for (int i=1;i<=n;++i) cin>>p[i];
  g[l].pb(r);
  g[r].pb(l);
  int res=0;
  for (int i=1;i<=(int)1e6;++i) {
    for (int i=1;i<=n;++i) tr[i].clear();
    res=max(res,solve_sub1(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...