看第一眼以為這個題不好做,把過多的時間浪費在第二題上了。《彩色的樹》這題是乙個頂點染色的問題,用點dfs去不斷染色,然後記錄子樹的個數就好,題目的內容如下:
給定一棵n個節點的樹,節點編號為1, 2, …, n。樹中有n - 1條邊,任意兩個節點間恰好有一條路徑。這是一棵彩色的樹,每個節點恰好可以染一種顏色。初始時,所有節點的顏色都為0。現在需要實現兩種操作:
改變節點x的顏色為y;
詢問整棵樹被劃分成了多少棵顏色相同的子樹。即每棵子樹內的節點顏色都相同,而相鄰子樹的顏色不同
直接貼**了,我的**沒有按時提交,不排除有錯誤。
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define inf 99999999
#define max_v 200000
using
namespace
std;
int vist[10001];
int ma;
int n;
int color[max_v];
vector
g[max_v];
void dfs(int i)
}return;
}int main(int argc, char* argv)
color[n] = 0;
memset(vist, 0, sizeof(vist));
for(i = 1; i<= n; i++)
}cin>>q;
cout
<<"case #"
<":"
>l;
if(l==1)
cin>>m>>n;
color[m] = n;
ma=0;
memset(vist, 0, sizeof(vist));
for(j = 1; j<= n; j++) }}
}return
0;}
2015程式設計之美 彩色的樹
題目1 彩色的樹 時間限制 2000ms 單點時限 1000ms 記憶體限制 256mb 描述給定一棵n個節點的樹,節點編號為1,2,n。樹中有n 1條邊,任意兩個節點間恰好有一條路徑。這是一棵彩色的樹,每個節點恰好可以染一種顏色。初始時,所有節點的顏色都為0。現在需要實現兩種操作 1.改變節點x的...
程式設計之美 1 5 快速找出故障機器
解法3 使用異或 問題1 找出出現奇數次的兩個數 void findrepeatedtwonumbers int a,int n,int no1,int no2 temp的值現為兩個出現奇數次的數的異或 找第乙個為1的位 for j 0 j sizeof int 8 j 第j位為1,說明這兩個數字在...
程式設計之美 1 5 快速找出故障機器
題目 假設乙個機器只儲存乙個標號為id的記錄,假設每份資料儲存2個備份,這樣就有2個機器儲存了相同的資料。其中id是小於10億的整數 問題1 在某個時間,如果得到乙個資料檔案id的列表。是否能夠快速的找到這個表中僅出現一次的id?即快速找出出現故障的機器儲存的資料id。問題2 如果有兩台機器宕機呢?...