A. Destroying Bridges
时间限制: 1秒
内存限制: 256兆
输入: 标准输入
输出: 标准输出
有 nnn 个岛屿,编号为 1,2,…,n1,2,…,n1,2,…,n。最初,每对岛屿都由一座桥连接。因此,一共有 n(n−1)2\frac{n(n-1)}{2}2n(n−1) 座桥。
Everule 住在岛屿 111 上,喜欢利用桥梁访问其他岛屿。Dominater 有能力摧毁最多 kkk 座桥梁,以尽量减少 Everule 可以使用(可能是多座)桥梁到达的岛屿数量。
如果 Dominater 以最佳方式摧毁桥梁,求 Everule 可以访问的岛屿(包括岛屿 111)的最少数量。
输入
每个测试包含多个测试用例。第一行包含一个整数 ttt (1≤t≤1031 \leq t \leq 10^31≤t≤103) - 测试用例的数量。测试用例说明如下。
每个测试用例的第一行也是唯一一行包含两个整数 nnn 和 kkk (1≤n≤1001 \leq n \leq 1001≤n≤100, 0≤k≤n⋅(n−1)20 \leq k \leq \frac{n \cdot (n-1)}{2}0≤k≤2n⋅(n−1))。
输出
针对每个测试案例,输出如果 Dominater 以最佳方式摧毁桥梁,Everule 可以访问的最少岛屿数量。
示例
输入
6
2 0
2 1
4 1
5 10
5 3
4 4
输出
2
1
4
1
5
1
注意
在第一个测试案例中,由于无法摧毁桥梁,所以所有岛屿都可以到达。
在第二个测试案例中,您可以摧毁 111 岛和 222 岛之间的桥梁。Everule 将无法访问岛屿 222,但仍然可以访问岛屿 111。因此,Everule 可以访问的岛屿总数为 111。
在第三个测试案例中,尽管 Dominater 做了什么,Everule 总是有办法到达所有的岛屿。例如,如果 "多米那 "摧毁了岛屿 111 和 222 之间的桥梁,由于 111 和 333 之间以及 333 和 222 之间的桥梁没有被摧毁,埃弗鲁勒仍然可以通过 1→3→21→3→21→3→2 到达岛屿 222。
在第四个测试案例中,你可以摧毁 k=n⋅(n−1)2k = \frac{n \cdot (n-1)}{2}k=2n⋅(n−1) 之后的所有桥梁。Everule 将只能访问 111 岛(111 岛)。
解题思路
nnn个岛屿,每个岛屿之间相互连接,那么一座岛屿最多有n−1n-1n−1座桥连接,如果k>=n−1k>=n-1k>=n−1,直接把1岛上的所有桥全拆了,只能经过一座岛。如果k<n−1k<n-1k<n−1,那么无论怎么拆所有岛都是联通的。
题解
#define _CRT_SECURE_NO_WARNINGS 1
#include <iostream>
#include <vector>
#include <algorithm>
#include <set>
#include <unordered_map>
#include <cstring>
#include <string>
#include <queue>
#include <stack>
#include <map>
#include <list>
#include <bitset>
#include <cmath>
#define endl '\n'
#define ft first
#define sd second
#define yes std::cout<<"Yes\n"
#define no std::cout<<"No\n"
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef pair<string, string> pss;
typedef pair<string, int> psi;
typedef pair<string, ll> psl;
typedef vector<bool> vb;
typedef vector<int> vi;
typedef vector<ll> vl;
typedef vector<string> vs;
typedef vector<pii> vpii;
typedef vector<pll> vpll;
typedef vector<pss> vpss;
typedef vector<vi> vvi;
typedef vector<vl> vvl;
typedef queue <int> qi;
typedef queue <ll> ql;
typedef queue <pii> qpii;
typedef queue <pll> qpll;
typedef queue <psi> qpsi;
typedef queue <psl> qpsl;
typedef priority_queue<int> pqi;
typedef priority_queue<ll> pql;
typedef priority_queue<string> pqs;
typedef priority_queue<pii> pqpii;
typedef priority_queue<psi> pqpsi;
typedef priority_queue<pll> pqpl;
typedef priority_queue<psi> pqpsl;
typedef map<int, int> mii;
typedef map<ll, ll> mll;
typedef map<char, int> mci;
typedef map<char, ll> mcl;
typedef map<string, int> msi;
typedef map<string, ll> msl;
typedef unordered_map<int, int> umii;
typedef unordered_map<ll, ll> uml;
typedef unordered_map<char, int> umci;
typedef unordered_map<char, ll> umcl;
typedef unordered_map<string, int> umsi;
typedef unordered_map<string, ll> umsl;
void cinv(vi vec, int n)
{
for (int i = 1; i <= (n); i++)
cin >> (vec)[i];
}
void rcinv(vi vec, int n)
{
for