hdu6201 transaction transaction transaction(from 2017 ACM/ICPC Asia Regional Shenyang Online)
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hdu6201 transaction transaction transaction(from 2017 ACM/ICPC Asia Regional Shenyang Online)相关的知识,希望对你有一定的参考价值。
最开始一直想着最短路,不过看完题解后,才知道可以做成最长路。唉,还是太菜了。
先上图:
只要自己添加两个点,然后如此图般求最长路即可,emmm,用SPFA可以,迪杰斯特拉也可以,或者别的都ok,只要通过一次即可。
上代码:
1 #include <cstdio> 2 #include <cstring> 3 #include <vector> 4 #include <queue> 5 #include <algorithm> 6 using namespace std; 7 8 const int maxn= 100005; 9 int n; 10 int a[maxn]; 11 int d[maxn]; 12 struct node{ 13 int u,v,d; 14 node(int u1=0,int v1=0,int d1=0):u(u1),v(v1),d(d1){} //重载 15 }; 16 17 vector<node>edges; 18 vector<int>g[maxn]; 19 20 void add(int u,int v,int w){ 21 edges.push_back(node(u,v,w)); 22 g[u].push_back((int)edges.size()-1); 23 } 24 25 bool vis[maxn]; //记录是否访问过 26 int cnt[maxn]; 27 queue<int>q; 28 29 void spfa(){ 30 memset(vis,0,sizeof(vis)); 31 memset(cnt,0,sizeof(cnt)); 32 while(!q.empty()){ 33 q.pop(); 34 } 35 vis[0]=1; 36 cnt[0]=1; 37 memset(d,0,sizeof(d)); 38 q.push(0); 39 while(!q.empty()){ 40 int u=q.front();q.pop(); 41 vis[u]=0; 42 for(int i=0;i<g[u].size();i++){ 43 int id=g[u][i]; 44 int v=edges[id].v; 45 int w=edges[id].d; 46 if(d[v] < d[u] + w){ 47 printf("@@%d %d\\n",i,d[v]); 48 d[v] = d[u] + w; 49 printf("@@@@@%d\\n",d[v]); 50 if(!vis[v]){ 51 vis[v]=1; 52 cnt[v]++; 53 q.push(v); 54 if(cnt[v] > n) 55 return; 56 } 57 } 58 } 59 } 60 printf("%d\\n",d[n+1]); 61 } 62 63 int main(){ 64 int t; 65 scanf("%d",&t); 66 while(t--){ 67 scanf("%d",&n); 68 edges.clear(); 69 for(int i=1;i<=n;i++){ 70 scanf("%d",&a[i]); 71 g[i].clear(); 72 } 73 74 for(int i=1;i<=n;i++){ 75 add(0,i,a[i]); 76 add(i,n+1,-a[i]); 77 } 78 for(int i=1;i<n;i++){ 79 int u,v,w; 80 scanf("%d%d%d",&u,&v,&w); 81 add(u,v,-w); 82 add(v,u,-w); 83 } 84 spfa(); 85 } 86 return 0; 87 }
以上是关于hdu6201 transaction transaction transaction(from 2017 ACM/ICPC Asia Regional Shenyang Online)的主要内容,如果未能解决你的问题,请参考以下文章
HDU - 6201 transaction transaction transaction(spfa求最长路)
hdu6201 transaction transaction transaction(from 2017 ACM/ICPC Asia Regional Shenyang Online)