zoukankan      html  css  js  c++  java
  • CSAcademy Beta Round #5 Force Graph

    题目链接:https://csacademy.com/contest/arhiva/#task/force_graph/

    大意是有若干个节点,每个节点对应一个二维坐标,节点之间相互有斥力存在。同时有些节点之间有变存在。对于有边存在的节点,他们互相的斥力大小为F1*dis值,否则则为F2*dis值,其中dis值为节点之间的欧氏距离。问每个节点受到的斥力大小。

    这个其实就是很简单的数学推一下:先假设所有的点都受到F2*dis值,然后再加上所有有边的其他节点的斥力修正。

     1 #include <iostream>
     2 #include <vector>
     3 #include <algorithm>
     4 #include <string>
     5 #include <cstring>
     6 #include <cstdio>
     7 #include <math.h>
     8 #include <queue>
     9 #include <stack>
    10 #include <map>
    11 #include <cassert>
    12 #include <set>
    13 using namespace std;
    14 
    15 
    16 const int N=323456;
    17 
    18 
    19 struct Edge {
    20     int to,next;
    21     Edge() {}
    22     Edge(int _to,int _next):to(_to),next(_next) {}
    23 } edge[N<<2];
    24 int idx=1,head[N];
    25 inline void addedge(int u,int v) {
    26     edge[++idx]=Edge(v,head[u]);
    27     head[u]=idx;
    28 }
    29 
    30 long long x[N],y[N];
    31 int main () {
    32     int n,m;
    33     long long f1,f2;
    34     while (scanf("%d %d %lld %lld",&n,&m,&f1,&f2)==4) {
    35         idx=1;memset(head,0,sizeof head);
    36         for (int i=1;i<=m;i++) {
    37             int u,v;
    38             scanf("%d %d",&u,&v);
    39             addedge(u,v);
    40             addedge(v,u);
    41         }
    42         long long sx=0,sy=0;
    43         for (int i=1;i<=n;i++) {
    44             scanf("%lld %lld",x+i,y+i);
    45             sx+=x[i];sy+=y[i];
    46         }
    47         for (int i=1;i<=n;i++) {
    48             long long rx=(x[i]*n-sx)*f2;
    49             long long ry=(y[i]*n-sy)*f2;
    50             for (int k=head[i];k;k=edge[k].next) {
    51                 int j=edge[k].to;
    52                 long long dx=x[i]-x[j],dy=y[i]-y[j];
    53                 rx+=dx*(f1-f2);ry+=dy*(f1-f2);
    54             }
    55             cout<<rx<<" "<<ry<<endl;
    56         }
    57     }
    58     return 0;
    59 }
    View Code
  • 相关阅读:
    合并区间
    编译与运行
    传递信息
    划分字母区间
    无重叠区间
    用最少数量的箭引爆气球
    根据身高重建队列
    二叉树展开为链表
    动态添加按钮
    基础知识
  • 原文地址:https://www.cnblogs.com/micrari/p/5478206.html
Copyright © 2011-2022 走看看