Y
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 304 Accepted Submission(s): 104
Problem Description

Sample Input
4
1 2
1 3
1 4
Sample Output
1
Hint
1. The only set is {2,3,4}.
2. Please use #pragma comment(linker, "/STACK:16777216")一定要构个无向图,不构无向图会有神数据卡你:

1 #pragma comment(linker, "/STACK:16777216") 2 #include <iostream> 3 #include <stdio.h> 4 #include <stdlib.h> 5 #include <algorithm> 6 #include <math.h> 7 #include <string.h> 8 #include <set> 9 #include <vector> 10 #define ll long long int 11 using namespace std; 12 vector<int> a[100005]; 13 int b[100005]; 14 ll sum,n; 15 ll x[100005]; 16 int fun(int x1) 17 { 18 b[x1]=1; 19 int size=a[x1].size(); 20 x[x1]=1; 21 int i; 22 for(i=0;i<size;i++) 23 if(!b[a[x1][i]]) 24 x[x1]+=fun(a[x1][i]); 25 return x[x1]; 26 } 27 void dfs(int x1) 28 { 29 b[x1]=1; 30 int size=a[x1].size(); 31 if(size==0) return ; 32 int i; 33 ll ma=n-1; 34 for(i=0;i<size;i++) 35 if(!b[a[x1][i]]) 36 { 37 ma-=x[a[x1][i]]; 38 } 39 for(i=0;i<size;i++) 40 if(!b[a[x1][i]]) 41 sum-=ma*x[a[x1][i]],ma+=x[a[x1][i]],dfs(a[x1][i]); 42 } 43 int main() 44 { 45 ll x1,y1; 46 int i,j; 47 while(scanf("%d",&n)!=EOF) 48 { 49 memset(x,0,sizeof(x)); 50 sum=n*(n-1)/2*(n-2)/3; 51 memset(b,0,sizeof(b)); 52 for(i=1;i<=n;i++) 53 a[i].clear(); 54 for(i=1;i<n;i++) 55 { 56 scanf("%d%d",&x1,&y1); 57 a[x1].push_back(y1); 58 a[y1].push_back(x1); 59 } 60 fun(1); 61 memset(b,0,sizeof(b)); 62 dfs(1); 63 cout<<sum<<endl; 64 } 65 }