AOJ 795 西瓜理髮記(三)

2021-07-15 06:54:34 字數 1859 閱讀 5918

description

順利潛入勺林寺幾天後,方丈給了西瓜乙個光榮而艱鉅的任務——打掃寺廟中的道路。同時給了西瓜一張勺林寺的地圖。

西瓜這才知道,勺林寺中總共有n座房子,但道路只有n-1條,這n-1條道路連線了寺中的所有房子,即保證在任何兩座房子都能沿著道路抵達。

好在西瓜人緣不錯,他知道每座房子中都有個自己的朋友,只要給他們每個人打個**,讓他到自己這裡來,順便把路也掃了,即給某座房子中的朋友打過**後,可認為從該房子到西瓜所在的位置之間所有的道路都會被打掃乾淨。

同時西瓜還知道,這n-1條道路中有一些路昨天已經被人打掃過了不需要再打掃一遍。

現在西瓜想知道,自己最少要給多少個朋友打**才能完成方丈給的任務。

西瓜在編號為1的房子中。

input

輸入包含多組資料

每組資料第一行包含乙個n(2 ≤ n ≤ 10^5),表示有n座房子

之後n-1行,每行三個數字a,b,c表示在房子a和房子b之間有一條路,c等於1表示路已被打掃,c等於2表示路未被打掃。

output

每組資料輸出乙個整數k,表示最少要給k個朋友打**

sample input

original

transformed

5

1 2 2

1 3 2

1 4 2

1 5 2

sample output

original

transformed

4

解題思路:

bfs + dfs

**:

#include #include #include #include #include #include #include #include #include #include #include using namespace std;

#define mod 7

#define inf 0x3f3f3f3f

#define lson (rt << 1)

#define rson (rt << 1 | 1)

#define clear(a) memset(a, 0, sizeof(a))

#define max(a, b) ( (a) > (b) ? (a) : (b) )

#define min(a, b) ( (a) < (b) ? (a) : (b) )

typedef long long ll;

typedef pairpi;

typedef struct node

node(int a, int b)

}edge;

typedef struct nnss;

const int maxn = 1e5 + 5;

const int dir[8][2] = ;

int ans;

ss s[maxn];

int vis[maxn], num[maxn];

vectorvec[maxn];

bool cmp(ss a, ss b)else

}void dfs(int p)

}void bfs()}}

}int main()

bfs();

for(int i = 1; i <= n; ++i) num[i] = s[i].lev;

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

memset(vis, 0, sizeof(vis));

int ans = 0;

for(int i = 1; i <= n; ++i)}}

printf("%d\n", ans);

}return 0;

}