zoukankan      html  css  js  c++  java
  • atc160

    传送门



    Task Name Time Limit Memory Limit
    A Coffee        2 sec 1024 MB Submit

    only if its 3-rd and 4-th characters are equal and its 5-th and 6-th characters are also equal.
    简单比较一下即可


    B Golden Coins      2 sec 1024 MB Submit

    只有两种硬币格式  500 和 5, 分别能获得快乐值 1000 和 5, 那么把 X先换成500硬币再将剩下的换成5硬币即可


    C Traveling Salesman around Lake   2 sec 1024 MB Submit

    先排个序,把这些房子当成一个环   将两两之间的距离相加  然后找到最大的距离, 减去最大距离 即为最小值


    D Line++            2 sec 1024 MB Submit

    从1到n是一条链,然后加一条x到y的边 问最短距离为1、2、3……的边的数量为?
    可以直接暴力枚举所有的情况   例如说 计算点a 到 点b的距离  先分别计算 从a->x+1+y->b(abs|x-a|+1+abs|y-b|)  和 a->y+1+b->x 的距离(abs|x-b|+1+|a-y|)、abs|a-b|,然后取最小值, 计数
    最后输出所有的值即可


    E Red and Green Apples    2 sec 1024 MB Submit

    要吃X个红苹果 Y个绿苹果, 然后分别有A个红苹果、B个绿苹果 和 C个多彩苹果  每个苹果都有对应的美味值  问最大的美味值为多少
    其中多彩苹果可以当红苹果 也可以 当绿苹果, 做法是选从红苹果中选X个最大美味值的苹果 从绿苹果中选择Y个最大美味值的苹果
    然后与多彩苹果构成一个新的数组, 从中选择X+Y的最大美味值的苹果 统计和 即可


    F Distributing Integers      3 sec 1024 MB Submit

    输入N, 表示有顶点1……N   然后输入N-1条边, 问分别从1……N出发分别有多少种路径遍历所有的顶点

    每次只能从已∏经走过的顶点 跳到 与之前顶点有边相连的顶点,

    看了半天, 好像懂了  求每个顶点作为起始点的DAG拓扑数,

    每次先计算每个点的子节点数和子节点节点数的乘积和  再单独计算每个点作为起点的路径数
    ans[i] = (n-siz[v])  *(n-1)! / ∏ mul[v] 

     enmmmmmm  还是一知半解 我再想想

    #include <bits/stdc++.h>
    using namespace std;
    
    typedef long long ll;
    #define ll long long
    #define all(v) (v).begin(), (v).end()
    #define _for(i,a,b) for(int i = (a); i < (b); i++) 
    #define _rep(i,a,b) for(int i = (a); i <= (b); i++)
    
    const int kMod = 1e9 + 7;
    const int kMaxN = 1e6 + 5;
    void taskA() {
        string s; cin >> s;
        int n = s.size();
        cout << (s[2]==s[3] && s[4]==s[5] ? "Yes
    " : "No
    ");
        return;
    }
    void taskB() {
        int n; cin >> n;
        int ans = 0;
        ans += (n/500)*1000; n%=500;
        ans += (n/5)*5;
        cout << ans;
        return;
    }
    void taskC() {
        int n,k; cin >> k >> n;
        vector<int> a(n);
        _for(i,0,n) cin >> a[i];
        sort(a.begin(), a.end());
        ll ans = 0;
        int ma = 0;
        _for(i,1,n) {
            ans += (a[i]-a[i-1]); 
            ma = max(ma, a[i]-a[i-1]);
        }
        ans += (k-a[n-1]+a[0]);
        ma = max(ma, k-a[n-1]+a[0]);
        cout << ans-ma;
        return;
    } 
    void taskD() {
        int n,x,y; cin >> n >> x >> y;
        vector<int> cnt(n, 0);
        _rep(i,1,n) _rep(j,i,n) {
            int dis = j-i;
            int d1 = abs(i-x)+abs(j-y)+1;
            int d2 = abs(i-y)+abs(j-x)+1;
            d1 = min(d1, d2);
            dis = min(dis, d1);
            cnt[dis]++;
        }
        _for(i,1,n) {
            cout << cnt[i] << "
    "; 
        }
        return;
    }
    void taskE() {
        int x,y,a1,b1,c1; cin >> x >> y >> a1 >> b1 >> c1;
        vector<int> a(a1), b(b1), c(c1+x+y);
        _for(i,0,a1) cin >> a[i];
        _for(i,0,b1) cin >> b[i];
        _for(i,0,c1) cin >> c[i];
        sort(all(a)); sort(all(b)); 
        reverse(all(a)); reverse(all(b)); 
        
        _for(i,0,x) c.push_back(a[i]);
        _for(i,0,y) c.push_back(b[i]);
    
        sort(all(c));reverse(all(c));
        ll ans = 0;
        _for(i,0,x+y) ans += c[i];
        cout << ans << "
    ";
        return;
    }
    const int N = 2e5+100;
    const int mod = 1e9+7;
    int siz[N],n;
    ll mul[N],fac[N],ans[N];
    vector<int> g[N];
    
    ll fpow(ll a, ll b) {
        ll ret = 1;
        while(b) {
            if(b&1)  ret = ret*a%mod;
            b >>= 1;
            a = a*a%mod;
        }
        return ret;
    }
    void predfs(int u, int fa) {
        siz[u] = mul[u] = 1;
        for(int v : g[u]) {
            if(v == fa) continue;
            predfs(v,u);
            siz[u] += siz[v];
            mul[u] = mul[u]*mul[v]%mod;
        }
        mul[u] = mul[u]*siz[u]%mod;
    }
    void dfs(int u, int fa, ll tmp) {
        for(int v : g[u]) if(v != fa) tmp = tmp*mul[v]%mod;
        ans[u] = fac[n-1]*fpow(tmp, mod-2)%mod;
        for(int v : g[u]) 
            if(v != fa) 
            dfs(v, u, tmp*fpow(mul[v], mod-2)%mod*(n-siz[v])%mod);
    }
    void taskF() {
        scanf("%d", &n);
        _for(i,1,n) {
            int x,y;         
            scanf("%d%d", &x, &y);
            g[x].push_back(y);
            g[y].push_back(x);
        }
        fac[0] = 1;
        _rep(i,1,n) fac[i] = fac[i-1]*i%mod;
        predfs(1, 0);
        dfs(1,0,1);
        _rep(i,1,n) printf("%lld
    ", ans[i]);
        return;
    }
    int main(){
        //ios::sync_with_stdio(false), cin.tie(nullptr);
        //taskA();
        //taskB();
        //taskC();
        //taskD();
        //taskE();
        taskF();
        return 0;
    }
  • 相关阅读:
    Trojan.DL.Agent.nxd和RootKit.Agent.yj木马清除
    Java中的格式化数值(eg:保留两位小数)
    Int16, Int32, Int64的一点感悟
    在win2003上设置asp网站
    WPF学习笔记.
    对WF工作流异常(Event on interface type for instance id cannot be delivered)的一点总结.
    创建,安装,调试 Windows Service
    灵活而又可怕的params参数数组
    (转) 输入码、区位码、国标码与机内码
    SQL Server 2008 未来将不再包含全文检索功能, 再研究此功能已经没多大意思了.
  • 原文地址:https://www.cnblogs.com/163467wyj/p/12861268.html
Copyright © 2011-2022 走看看