0923-シミュレーションゲーム

A

例は練習を推測を参照してください。

トピックを初めて目には、数秒間考えや関連差動の配列されなければなりません

そして、差分サンプル配列はそれを試してみました取る、私は練習を推測します

そして、自身がデータで構築され、それは方法を導くことができるようです

ビートのためにビートに!評価するときにああ、私は暴力ああORZを除外書き込みませんが、幸い、間違ったorzorzorzはでしたが、本当に少し緊張

B

彼女は、問題の表面を見ていない、それは十分であろう他の二つの額面の額面を取ることです、の思い!30〜40分、小さすぎるサンプルをノックEX_gcd、サンプルが大きすぎ、あまりにもあまりにもあまりにも...まあグリップ草のですか?最後のポイントはどのように起こっています

ちょっとグリップ草?これは、他の三つの代表番号の数を保持することです!

わたしの民の愚かな.JPEG

最後に、それを考える、それはバックパックああバックパック、または無限のバックパック(ナップザック問題1 .......)の最も単純な種類であり、fはbool型のアレイおよびバックパックのも一種であります

C

emmm、質問のアイデアを欠い

この方法は、///////質問に書面で表現し、上下の両方が(ほとんど)エラーに気付かなかったで、最終的にコードを配置するために、説明するのは難しすぎます

ボスが出て、この質問を取る権利、権利はありませんでしたが、原因のデータセグメントに最後の40、50ポイントを混合するために、非常に明確で簡単です、と私は本当にただ木をノックしていない(はずですWA0それは)20分の直径を有し、

要約します

望ましいスコア:\(100 + 100 + 0 = 200 \)

実際のスコア:\(100 + 100 + 0 = 200 \)

大きな過ち精神遅滞が、WA0に想定されていません

最後の質問は、AC Cコードを置きます

#include<stdio.h>
#include<bits/stdc++.h>
#define LL long long
#define maxn 50005
#define maxm 100005
#define rel(i,s,n) for(int i=(s);i<(n);i++)
#define rep(i,s,n) for(int i=(s);i<=(n);i++)
#define red(i,s,n) for(int i=(s);i>=(n);i--)
#define res(i,x) for(int i=Last[x];i;i=Next[i])
using namespace std;
char buf[1<<20],*p1,*p2;
#define GC (p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<20,stdin),p1==p2)?0:*p1++)
template<class T> inline void read(T &n){
    char ch=GC;T w=1,x=0;
    while(!isdigit(ch)){if(ch=='-') w=-1;ch=GC;}
    while(isdigit(ch)){x=(x<<3)+(x<<1)+(ch^48);ch=GC;}
    n=x*w;
}
int x,y,z;
int L,R,Mid;
int n,m,tot,Ans;
struct Phenning{int id;int val;bool MK;};
int End[maxm],Last[maxn],Next[maxm],Len[maxm],f[maxn],g[maxn];
vector<Phenning>Son[maxn];
bool cmp(Phenning a, Phenning b){
    return a.val < b.val;
}
void add(int x, int y, int z){
    tot ++;
    Next[tot] = Last[x];
    Last[x] = tot;
    End[tot] = y;
    Len[tot] = z;
}
void QwQ(int x, int fa){
    int son = 0;
    res(i,x)if(End[i]!=fa){
        son ++;
        QwQ(End[i], x);
        
        ///////////////!!!!!!!!!!!!!!!!!!!!!
        f[x]+=f[End[i]];
        ///////////////!!!!!!!!!!!!!!!!!!!!!
        
        Phenning tmp;
        tmp.MK = 0;
        tmp.id = End[i];
        tmp.val = Len[i] + g[End[i]];
        Son[x].push_back(tmp);
    }
    if(son == 0)return;
    son --;
    sort(Son[x].begin(), Son[x].end(), cmp);
    rep(i, 0, son)if(Son[x][i].val >= Mid){f[x] ++; Son[x][i].MK = 1; continue;}
    rep(i, 0, son){
        //////////////////////////
        if(Son[x][i].MK) continue;
        //////////////////////////
        Phenning tmp;
        tmp.val = Mid - Son[x][i].val;
        int pos = lower_bound(Son[x].begin()+i+1, Son[x].end(), tmp, cmp) - Son[x].begin();
        if(pos>son)continue;
        while(Son[x][pos].MK == 1 && pos < son)pos ++;
        
        ///////////////////////////
        if(Son[x][pos].MK == 1)continue;
        ///////////////////////////
        
        if(Son[x][pos].val >= tmp.val){f[x] ++; Son[x][i].MK = Son[x][pos].MK = 1;}
    }
    red(i, son, 0)if(!Son[x][i].MK){g[x] = Son[x][i].val;break;}
    
    ///////////////
    Son[x].clear();
    ///////////////
    
}
bool isok(){
    rep(i, 1, n)f[i] = g[i] = 0;
    QwQ(1, 0);
    if(f[1] >= m)return 1;
    //puts("hahhahaha");
    return 0;
}
int main(){
    read(n);read(m);
    rel(i, 1, n){
        read(x);read(y);read(z);
        R += z;
        add(x, y, z);
        add(y, x, z);
    }
    while(L <= R){
        Mid = (L + R) >> 1;
        if(isok())Ans = Mid, L = Mid + 1;
        else R = Mid - 1;
    }
    printf("%d", Ans);
    return 0;
}
//长度最小的赛道长度最大:二分 

おすすめ

転載: www.cnblogs.com/qwqq/p/11621089.html