[ create a new paste ] login | about

Link: http://codepad.org/kdg5WvIP    [ raw code | output | fork ]

pva701 - C++, pasted on Jun 25:
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <vector>
using namespace std;
vector <int> level, vert, tr, ind, a;
vector <vector <int> > g;
int Min(int x, int y)
{
  return (level[x] < level[y]? x: y);
}
void init(vector <int>& t, vector <int> ver)
{
  t.resize(ver.size() * 2 + 2);
  for(int i = ver.size(); i < 2 * ver.size(); i++) t[i] = ver[i - ver.size()];
  for(int i = ver.size() - 1; i > 0; i--) t[i] = Min(t[2 * i], t[2 * i + 1]);
}
int fndMin(int l, int r)
{
  if (l > r) swap(l, r);
  l += vert.size();
  r += vert.size();
  int mini = l - vert.size();
  while (l <= r)
  {
    if (l & 1)
    {
      mini = Min(mini, tr[l]);
      l++;
    }
    if (!(r&1))
    {
      mini = Min(mini, tr[r]);
      r--;
    }
    l >>= 1;
    r >>= 1;
  }
  return mini;
}
void dfs(int v, int pr, int lev)
{
  level[v] = lev;
  vert.push_back(v);
  ind[v] = vert.size() - 1;
  for(int i = 0; i < g[v].size(); i++)
    if (pr != g[v][i])
    {
      dfs(g[v][i], v, lev + 1);
      vert.push_back(v);
    }
}
int main()
{
  int n, m, v;
  cin >> n >> m;
  g.resize(n + 1);
  level.resize(n + 1);
  ind.resize(n + 1);
  a.resize(2 * m + 2);
  for(int i = 1; i < n; i++)
  {
    scanf("%d", &v);
    g[i].push_back(v);
    g[v].push_back(i);
  }
  dfs(0, -1, 0);
  init(tr, vert);
  cin >> a[1] >> a[2];
  long long x, y, z, ans = 0;
  v = 0;
  cin >> x >> y >> z;
  for(int i = 3; i <= 2 * m; i++) a[i] = (x * a[i - 2] + y * a[i - 1] + z) % n;
  for(int i = 1; i <= m; i++)
  {
    v = fndMin(ind[(a[2 * i - 1] + v) % n], ind[a[2 * i]]);
    ans += v;
  }
  cout << ans << endl;
  return 0;
}


Output:
1
2
3
4
5
6
7
8
cc1plus: warnings being treated as errors
In function 'void init(__gnu_debug_def::vector<int, std::allocator<int> >&, __gnu_debug_def::vector<int, std::allocator<int> >)':
Line 15: warning: comparison between signed and unsigned integer expressions
In function 'void dfs(int, int, int)':
Line 46: warning: comparison between signed and unsigned integer expressions
In function 'int main()':
Line 70: error: ISO C++ does not support 'long long'
compilation terminated due to -Wfatal-errors.


Create a new paste based on this one


Comments: