首先對於序列上一點,它對答案的貢獻只有與它的前驅和後驅(前提顏色相同)構成的點對,
於是想到用set維護每個顏色,修改操作就是將2個set暴力合併(小的向大的合併),每次插入時更新答案即可
顏色數要離散化,或者用map也行
#include #include #include #define n 100010using namespace std;
int n,m,ans=2147483647;
map> a;
inline int read()
while(ch>='0'&&ch<='9')
return x*f;
}void upd(int c,int p)
int main()
for(;m--;)//考慮特殊情況
if(a[x].size()>a[y].size()) swap(a[x],a[y]);
for(int it:a[x]) upd(y,it);
a[x].clear();//合併後應清空
printf("%d\n",ans);
} return 0;
}
樹形DP一般解題思路
注意先求下屬,再求上司。利用鏈式前向星儲存樹 p1352 沒有上司的舞會 include using namespace std const int maxn 6e3 10 int n,r maxn head maxn int cnt 邊的編號 int d maxn 統計編號節點父節點的個數 int...
01揹包(一般dp實現 樹形dp實現)
一般dp,要遍歷完整個二維陣列。include include using namespace std int dp 10000 10000 int w 10000 v 10000 bool chosen 10000 10000 intmain for int i 1 i m i else else...
從一般管理原則看微軟的重組
事先宣告 想對微軟這樣乙個龐大的公司做出周到客觀的評價其實很難,我只評價我看到的,也只保證邏輯通暢。微軟近來重組了,有人看好,有人看衰,我這裡用一般管理原則看一下這次重組,目標不是說微軟,而是說管理原則,借下微軟的勢而已。管理中第一原則當是實事求是,形象講就是採取的措施和待解決的問題要有直接關聯。而...