首先这道题的节点数太多了,达到10^5,所以不能用数组模拟啊,肯定TLE,所以用贪心算法,读取第一个结点,搬到第二个结点,剩下的和第二个结点合并,一起搬到第三个结点。。。。。。这个算法很好,每次看成只是邻居间买卖,下面是代码:
#include<stdio.h> #include<iostream> #include<stdlib.h> using namespace std; int main() { int n; while(cin>>n && n) { long long temp,now,sum = 0; cin>>temp; for(int i = 1;i < n;i++) { cin>>now; sum += abs(temp); now += temp; temp = now; } cout<<sum<<endl; } return 0; }