11月03日解題報告

2021-08-10 07:08:15 字數 4249 閱讀 4291

今天的考試應該還算在狀態的吧,第一題雖然在lemon上面只有30分,但是在洛谷上是a掉了,emmm…雖然是這樣但還是要注意不要開太大才是,畢竟不怕一萬就怕萬一嘛…還是要注意一下就是…

題面

從前有一棵樹,確定乙個根節點,最大化所有點深度之和

輸入

第一行n 接下來n - 1 行表示樹的每條邊

輸出

乙個整數,表示根節點編號

sample input

8 1 4

5 6

4 5

6 7

6 8

2 4

3 4

sample output

7ac思路

這題據說是dp。。。但是我用dfs過了,思路簡單來說就是先以1為根建一棵樹,然後按照深度排序,最後一層層列舉它自己是根節點的情況,最後算出最大值,按字典序最小的值輸出就可以了

**

#include

#include

#include

using

namespace

std;

long

long tot=0;

long

long head[1000005];

long

long dian[1000005];

long

long fa[1000005];

long

long vis[1000005];

long

long he[1000050];

long

long deep[1000050];

long

long ans=0,j=0;

long

long shu[1000500];

long

long n;

struct node

d[1000009];

struct nd

e[3000009];

long

long read()

long

long build(long

long f,long

long t)

long

long cmp(const node &a,const node &b)

long

long sp(long

long u,long

long shen)

}}int main()

sp(1,1);

sort(d+1,d+n+1,cmp);

shu[1]=he[1];

ans=shu[1];

j=1;

for(long

long i=2;i<=n;i++)

cout

<題面

第一行:n,表示有n 個人站成一排**比賽

第二行:有n 個數字,表示每個人的喜歡值

輸出

輸出選出的這兩段觀眾喜歡值之和的最大值。注意一定要選出兩段觀眾,每段觀眾至少一人。

樣例輸入

7 4 -5 3 -1 11 -2 -1

樣例輸出

17ac思路

這道題據說也是dp。。。我開始想既然是dp,那就設定乙個i為中間值就可以了,結果鬼使神差地寫著寫著就變成乙個分別從左到右和從右到左遞推最大值的做法,然後列舉中間節點,最後沒用dp就a了

**

#include

#include

using

namespace

std;

long

long you[70000];

long

long n;

long

long ll[70000];

long

long jj[70000];

long

long ans=0;

long

long mmax=0;

long

long read()

while(a>='0'&&a<='9')sum=sum*10+a-'0',a=getchar();

return sum*f;

}int main()

ans=0,mmax=you[n];

for(int i=n;i>=1;i--)

ans=jj[1]+ll[2];

for(int i=1;i1]);

}cout

<題面

從前有n 個人,愉快地生活在一起。直到有一天他們學會了互黑。

每個人都有且僅有乙個黑的目標(這個目標有可能是他自己,這叫自黑)。對於那些沒人黑

的人(其他所有人黑的目標都不是他),他們想刷存在感,於是可以選擇放棄黑自己的目標而選

擇自黑(也就是二選一)。

注意只有一開始沒有作為任何人的目標的人才可以放棄目標選擇自黑。

規定輪到某個沒有被黑的人時,必須且僅能黑一次。所有被黑過的人都不能再黑別人了。

當然乙個人可以被黑很多次。

由你來決定乙個順序,大家按照順序行動。求問最後被黑的人數的最小值和最大值。

輸入

第一行乙個整數n

第二行n 個整數,第i 個整數ai 表示第i 個人的目標,滿足1< ai < n

輸出

兩個整數,依次表示最小值和最大值

樣例輸入

8 2 3 2 2 6 7 8 5

樣例輸出

3 6

ac思路

太難了看的似懂非懂,就暫時只放個**了(逃

**

#include

#include

using namespace std;

const int n=1e6+8;

int n,head[n],tot,l,r,h[n],que[n],cir[n],die[n];

intma,mi,hei[n],rd[n],rudu[n],cnt,cir_cnt,len,q[n];

bool vis[n],inq[n],incir[n],_die[n];

//inq在佇列,incir在圈內;

struct node

e[n<<1];

void add(int

x,int

y)//雙向圖;

intread()

void qiumin()

if(r+cir_cnt==cnt)mi+=(cir_cnt+1)>>1;

for(int i=1;i<=cnt;i++)mi+=_die[h[i]];

}void qiumax()

intx=0;

for(int i=1;i<=len;++i)

if(!incir[hei[que[i]]]) rudu[hei[que[i]]]--;

for(int i=len+1;i<=r;++i) if(!rudu[que[i]]) die[que[i]]=-1;

for(int i=1;i<=cnt;++i) if(die[h[i]]==-1) x++;

ma+=cnt-x;

}void solve(int rt)

}cnt=r,len=0;

for(int i=1;i<=r;i++)if(!rd[h[i]]) que[++len]=h[i],inq[h[i]]=1;

if(!len)

//成環直接可以算出來;

l=1,r=len;

while(l<=r)

cir_cnt=0;//統計環內個數;

for(int i=1;i<=r;i++)

while(u!=tmp);

break;}}

qiumin();

qiumax();

} int main()

11月04日解題報告

今天考試情況不好,策略上還存在問題,記憶體定義的問題又出現了,看來還是不能放鬆啊,第一題沒有開long long 直接從80掉到20,第二題超記憶體本來可以搞到的35分直接爆0,啊 本來可以有100多分的,看來還是自己能力有欠缺啊,還是要多多向大佬學習,好好改正才是,至於解題策略,還是要力求第一題要...

11月06日解題報告

今天考試感覺在狀態上還可以,但是覺得還是出現了一些心態上的問題,尤其是到後面改第二題的時候,整個人都是一種比較方的狀態,這樣可不行,還是要好好調整心態才是,emmmm,離考試也沒幾天了,要好好加油啊 題面 小a教室的牆上掛滿了氣球,五顏六色,小朋友們非常喜歡。剛一下課,小朋友們就打算去搶這些氣球。每...

10月31日解題報告

這次考試多多少少還是表現了自己在一些能力的缺失,還是太容易不審清楚題目就放開去做了,這一點不好,比如今天第一題與第三題,第一題真的水,但是自己卻因為水而想的過於簡單,直接就爆0了,血的教訓,第三題是因為自己沒有合理地估計答案範圍,貪心出來了,但是卻少開了long long 導致直接只有40分,改為l...