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