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\n" : "No\n");
    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] << "\n"; 
    }
    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 << "\n";
    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\n", ans[i]);
    return;
}

 

 

int main(){
    //ios::sync_with_stdio(false), cin.tie(nullptr);
    //taskA();
    //taskB();
    //taskC();
    //taskD();
    //taskE();
    taskF();
    return 0;
}

 

posted @ 2020-05-09 23:50  163467  阅读(128)  评论(0编辑  收藏  举报