【簡單菊花圖】Codeforce 1583Problem - B.md

phrink發表於2024-08-04

1583Problem - B - Codeforces

題目大意:n個點的無根樹 給出m個限制條件 (a,c,b)在a到b路徑上不能存在c點,求任意一種可能的樹的所有邊

注意資料範圍:1<m<n<1e5

這說明了最多有n-1個限制條件 這說明至少有一個點不存在限制條件 即這個點可以作為根節點root連線其他所有點形成邊

思路:記錄可以作為根節點root的點 然後for一遍 輸出即可

#include <cstdio>
#include <queue>
#include <deque>
#include <stack>
#include <map>
#include <cmath>
#include <algorithm>
#include <iostream>
#include <cstring>
#include <vector>
#define ep emplace_back 

#define lld long long 
#define ios std::ios::sync_with_stdio(false);std::cin.tie(0); 
#define vec vector 
const int N = 2e5+9;
const int INF = 0x7FFFFFFF; //2147483647

const int inf1 = 0x3f3f3f3f; //1061109567
const int inf2 = 0x7f7f7f7f; //2139062143 memset賦值用

using namespace std;
int tag[N];
int n,m;
void solve(){
    
    memset(tag,0,sizeof(tag));
    cin>>n>>m;
    for(int i=1 ; i<=m ; ++i){
        int a,b,c;
        cin>>a>>c>>b;
        tag[c]=1;
    }
    int tag__=0;
    //tag__就是根節點root
    for(int i = 1; i <= n; ++i){
        if( tag[i] ==0 ){
            tag__=i;
            break;
        }
    }
    for(int i = 1; i <= n; ++i){
        if(i != tag__)
            printf("%d %d \n",i,tag__);
    }
};
int main(){
    ios;
    int T=1;
    cin>>T;
    while(T--){
        solve();
    }
    return 0;
}

相關文章