2 条题解

  • 0
    @ 2025-1-17 9:19:08
    #include<bits/stdc++.h>
    using namespace std;
    const int N = 1010;
    bool G[N][N];
    bool res[N];
    int deg[N];
    int main(){
        freopen("p.in","r",stdin);
        freopen("p.out","w",stdout);
        int t;
        cin >> t;
        while(t --){
            memset(G,0,sizeof G);
            memset(deg,0,sizeof deg);
            memset(res,true,sizeof res);
            int ans = 0;
            int n;
            cin >> n;
            for (int i = 1; i < n; i ++) {
                int x, y;
                cin >> x >> y;
                G[x][y] = 1;
                deg[x] ++;
            }
            //cout << deg[5] << endl;
            for (int i = 1; i <= n; i ++) {
                for (int j = 1; j <= n; j ++) {
                    if (G[i][j] && deg[i] < deg[j]){ 
                        res[i] = false;
                        break;
                    }
                    if(G[j][i] && deg[i] < deg[j]){
                        res[i] = false;
                        break;
                    }
                }
            }
            ans = 0;
            for (int i = 1; i <= n; i ++) if(res[i]) {
                //cout << i << endl;
                ans++;
            }
            cout << ans << endl;
        }                  
        
        return 0;
    }
    
    • 0
      @ 2025-1-17 9:18:35
      #include<bits/stdc++.h>
      using namespace std;
      int deg[1010];//每一个结点的度数 
      int fa[1010];//每一个点的父亲结点
      int main(){
      	freopen("p.in","r",stdin);
      	freopen("p.out","w",stdout);
      	int t;
      	cin >> t;
      	while(t --){
      		vector<int> vec[1010];//每一个的儿子编号  
      		memset(deg,0,sizeof deg);
      		memset(fa, 0, sizeof fa); 
      		int n;
      		cin >> n;
      		for (int i = 1; i <= n-1; i ++){
      			int x, y;
      			cin >> x >> y;
      			vec[x].push_back(y);
      			fa[y] = x;
      			deg[x] ++;
      		}
      		int cnt = 0;
      		for (int i = 1; i <= n; i ++){//i代表结点编号 
      			bool flag = true;//代表i这个结点是否大于等于儿子结点的度 
      			for (int j = 0; j < vec[i].size(); j ++){
      					//j表示vector数组的下标
      					int u = vec[i][j];//与编号为i结点的儿子结点编号
      					if(deg[i] < deg[u]){
      						flag = false;
      						break;
      					} 
      			}
      			int v = fa[i];//i结点的父亲结点编号 
      			if(deg[i] >= deg[v] && flag){
      				cnt ++;
      			}
      		}
      		cout << cnt << endl;
      	}
      	
      	
      	return 0;
      }
      
      • 1

      信息

      ID
      436
      时间
      1000ms
      内存
      256MiB
      难度
      9
      标签
      (无)
      递交数
      336
      已通过
      34
      上传者