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
51 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;
}