Log_1

2017-03-11  本文已影响0人  WJNominate

[2017/3/5/-2017/3/11]

Codeforces #403 Div 2

Prob B

n 个人在意直线上,位置为x_i ,最大速度为 v_i ,求所有人到达同一点的最少时间(可能是浮点数)

二分时间


bool chk(double x){

  double l = a[0].x-a[0].v*x,r = a[0].x+a[0].v*x;

  double ll,rr,dx;

  for(int i = 1;i < N;i++){

    dx = a[i].v*x;

    ll = a[i].x-dx,rr = a[i].x+dx;

    if(ll > r || rr < l)  return false;

      l = max(l,ll),r = min(r,rr);

    if(l>r)  return false;

  return true;

Prob C

给一幅树,要求形如 a-b-c 的任意三个点不同色

记录遍历时每一个点的father 和 grandfather,DFS 或是 BFS 染色保证不同色即可


void DFS(int u,int fa){

  int len = G[u].size();

  int c = 1,v;

  for(int i = 0;i < len;i++){

    v = G[u][i];

    if(v == fa)  continue;

    while(c == col[u] || c == col[fa])  c++;

    col[v] = c++;

    //cout << v << " = " << col[v] << endl;

    DFS(v,u);

  }

}


/// BFS

  Q.push(1);col[1] = 1;fa[1]=1;

  while(!Q.empty()){

    int u,v,len,c;

    u =  Q.front();

    Q.pop();

    len = e[u].size(),c = 1;

    for(int i = 0;i < len;i++){

      v = e[u][i];

      if(col[v])  continue;

      if(c == col[u] || c == col[fa[u]])  c++;

      if(c == col[u] || c == col[fa[u]])  c++;

      col[v] = c++;

      Q.push(v);

      fa[v] = u;

      //cout << v << " col = " << c << endl;

    }

  }

Prob D

DINAMO BYTECITY

"DIN"

"DIB"

详细可看sample

先记录数据,保留有效部分,删掉不可能的边,然后跑二分图板子


上一篇 下一篇

猜你喜欢

热点阅读