[2023] 14届

news2024/11/24 4:33:59

1.日期统计

题意

1.日期统计 - 蓝桥云课 (lanqiao.cn)

思路

用dfs扫

对每一个位进行限制 花了一个小时

注意把答案枚举出来 对应一下看到底对不对

code

#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstring>
#include<map>
#include<set>
#include<vector>
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define  long long
#define PI acos(-1.0)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<char,int> PCI;
const int INF = 1e18 + 10;
const int N = 3e5 + 10;
const int M = 1e7 + 10;
const int mod = 1e9 + 7;
int n, m, k, ans;
int qcal(int a, int b) { int res = 1; while (b) { if (b & 1) res = res * a % mod; b >>= 1; a = a * a % mod; } return res; }
int a[1010];
int day[20] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
int year[20] = {0,2,0,2,3};
bool is_prime(int n) { if (n < 2) return false; for (int i = 2; i <= n / i; i++) { if (n % i == 0) { return false; } }return true; }
vector<int> ve;
int sum = 0;

struct node
{
	int y1,y2,d1,d2;
	bool operator<(const node& other) const 
	{
	    if (y1 != other.y1) {
	        return y1 < other.y1;
	    }
	    if (y2 != other.y2) {
	        return y2 < other.y2;
	    }
	    if (d1 != other.d1) {
	        return d1 < other.d1;
	    }
	    return d2 < other.d2;
	}
};
set<node> se;
void dfs(int u)
{
    if(ve.size() == 8)
    {
//        for(auto c:ve) cout << c << ' ';
//        cout << endl;
        node tmp = {ve[4],ve[5],ve[6],ve[7]};
        se.insert(tmp);
        return;
    }
    for(int i = u;i <= n;i ++)
    {
        if(ve.size() < 4)
        {
            if(a[i] == year[ve.size()+1]) 
            {
            	ve.push_back(a[i]);
	            dfs(i + 1);
	            ve.pop_back();
	            continue;
			}
        }
        if(ve.size() == 4)
        {
            if(a[i] == 0 || a[i] == 1)
			{
				ve.push_back(a[i]);
	            dfs(i + 1);
	            ve.pop_back();
	            continue;
			}
        }
        if(ve.size() == 5)
        {
            if(ve.back() == 0)
            {
                if(a[i] != 0)
                {
                    ve.push_back(a[i]);
                    dfs(i + 1);
                    ve.pop_back();
                    continue;
                }
                
            }
            else
            {
                if(a[i] == 1 || a[i] == 2 || a[i] == 0) 
                {
                    ve.push_back(a[i]);
                    dfs(i + 1);
                    ve.pop_back();
                    continue;
                }
            }
        }
        if(ve.size() == 6)
        {
            int now = ve[4] * 10 + ve[5];
            if(a[i] <= day[now] / 10)
            {
                ve.push_back(a[i]);
                dfs(i + 1);
                ve.pop_back();
                continue;
            }
        }
        if(ve.size() == 7)
        {
            int now = ve[4] * 10 + ve[5];
            if(ve[6] * 10 + a[i] <= day[now] && ve[6] * 10 + a[i] > 0)
            {
                ve.push_back(a[i]);
                dfs(i + 1);
                ve.pop_back();
                continue;
            }
        }
    }
}

void gzy()
{
    n = 100;
    for(int i = 1;i <= n;i ++) cin >> a[i];
    for(int i = 1;i <= n;i ++)
    {
        if(a[i] == 2) 
        {
        	ve.push_back(a[i]);
        	dfs(i+1);
        	ve.pop_back();
		}
    }
//    for(auto c:se)
//    {
//    	cout << c.y1 << ' ' << c.y2 << ' ' << c.d1 << ' ' << c.d2 << endl;
//	}
    cout << se.size() << endl;
}     
signed main()
{
    IOS;
    int _ = 1;
    while (_--) gzy();
    return 0;
}

2.01串的熵

题意

竞赛中心 - 蓝桥云课 (lanqiao.cn)

思路

直接枚举 要注意各种小细节,有log2的函数直接用

code

答案:11027421

#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstring>
#include<map>
#include<set>
#include<vector>
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define  long long
#define PI acos(-1.0)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<char,int> PCI;
const int INF = 1e18 + 10;
const int N = 3e5 + 10;
const int M = 1e7 + 10;
const int mod = 1e9 + 7;
int n, m, k, ans;
int qcal(int a, int b) { int res = 1; while (b) { if (b & 1) res = res * a % mod; b >>= 1; a = a * a % mod; } return res; }
int a[1010];
bool is_prime(int n) { if (n < 2) return false; for (int i = 2; i <= n / i; i++) { if (n % i == 0) { return false; } }return true; }
vector<int> ve;
int sum = 0;

void gzy()
{
    double n = 23333333;
    double ans = 11625907.5798;
    for(int i = 1;i <= n;i ++)
    {
        double x1 = -(i / n) * log2(i/n) * i;
        double x2 = -((n-i)/n) * log2(n-i)/n * (n-i);
        double res = x1 + x2;
        if((res - ans) <= 1e-3 && i <= n / 2) 
        {
            cout << i << endl;
        }
    }
}                                                                      
signed main()
{
    IOS;
    int _ = 1;
    while (_--) gzy();
    return 0;
}

3.冶炼金属

题意

竞赛中心 - 蓝桥云课 (lanqiao.cn)

思路

模拟 贪心

code

#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstring>
#include<map>
#include<set>
#include<vector>
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define  long long
#define PI acos(-1.0)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<char,int> PCI;
const int INF = 1e18 + 10;
const int N = 3e5 + 10;
const int M = 1e7 + 10;
const int mod = 1e9 + 7;
int n, m, k, ans;
int qcal(int a, int b) { int res = 1; while (b) { if (b & 1) res = res * a % mod; b >>= 1; a = a * a % mod; } return res; }
int a[1010];
bool is_prime(int n) { if (n < 2) return false; for (int i = 2; i <= n / i; i++) { if (n % i == 0) { return false; } }return true; }
int sum = 0;

void gzy()
{
    cin >> n;
    int maxid = INF,minid = 0;
    for(int i = 1;i <= n;i ++)
    {
        int x,y; cin >> x >> y;
        minid = max((x/(y+1)+1),minid);
        maxid = min(x / y,maxid);
    }
    cout << minid << ' ' << maxid << endl;
}                                                                      
signed main()
{
    IOS;
    int _ = 1;
    while (_--) gzy();
    return 0;
}

4.飞机降落

题意

竞赛中心 - 蓝桥云课 (lanqiao.cn)

思路

全部都要能降落

用dfs 每次推时间 然后如果怎么推都不行就false  记录cnt = n

code

#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstring>
#include<map>
#include<set>
#include<vector>
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define  long long
#define PI acos(-1.0)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<char,int> PCI;
const int INF = 1e18 + 10;
const int N = 310;
const int M = 1e7 + 10;
const int mod = 1e9 + 7;
int n, m, k, ans;
int qcal(int a, int b) { int res = 1; while (b) { if (b & 1) res = res * a % mod; b >>= 1; a = a * a % mod; } return res; }
int a[1010];
bool is_prime(int n) { if (n < 2) return false; for (int i = 2; i <= n / i; i++) { if (n % i == 0) { return false; } }return true; }
int t[N],d[N],l[N]; // 到达时间 能wait的时间 和下降需要的时间
bool st[N];// 1 指用过了   0 指没用过
int tnow = 0; // 从零开始
int cnt = 0;
bool flag = 0;
void dfs(int u)
{
    for(int i = 1;i <= n;i ++)
    {
    	if(cnt == n)
        {
            flag = 1;
            return;
        }
        if(st[i]) continue;
        // if(t[i] < tnow && t[i] + d[i] < tnow) return;
        if(t[i] + d[i] >= tnow)
        {
//            tnow += l[i];
			int ji = tnow;
            tnow = max(tnow,t[i]) + l[i];
            st[i] = 1;
            cnt ++;
            
            dfs(i);
            
			tnow = ji;
            st[i] = 0;
            cnt --;
            
        }
        if(cnt == n)
        {
            flag = 1;
            return;
        }
    }
}

void gzy()
{
	flag = 0;
	memset(st,0,sizeof st);
    cin >> n;
    for(int i = 1;i <= n;i ++) cin >> t[i] >> d[i] >> l[i];
    for(int i = 1;i <= n;i ++)
    {
        cnt = 1;
        tnow = t[i] + l[i];
        st[i] = 1;
        
        dfs(i);
        
        st[i] = 0;    
        cnt = 1;
    }
    if(flag) cout << "YES\n";
    else cout << "NO\n";
}
signed main()
{
    IOS;
    int _ = 1; cin >> _;
    while (_--) gzy();
    return 0;
}

//
//#include <iostream>
//#include <vector>
//using namespace std;
//
 创建飞机结构体变量
//struct plane
//{
//    int t, d, l;
//};
//bool vis[15];  // true表示飞机降落,false表示飞机未降落
//bool flag;  // 标记是否全部安全降落
//vector<plane> p(15);
 深搜
//void dfs(int m, int cnt, int last)  // last表示此前所有飞机降落所需的单位时间
//{
//    if (cnt == m)
//    {
//        flag = true;
//        return;
//    }
//    for (int i = 0; i < m; i++)
//    {
//        if (!vis[i] && p[i].t + p[i].d >= last)  // 只有来的时刻+盘旋时间 > last 的飞机才可以安全降落
//        {
//            vis[i] = true;
//            dfs(m, cnt + 1, max(last, p[i].t) + p[i].l);
//            vis[i] = false;
//        }
//    }
//}
//
//int main()
//{
//    int T;
//    cin >> T;
//    while (T--)
//    {
//        int N;
//        cin >> N;
//        for (int i = 0; i < N; ++i)
//            cin >> p[i].t >> p[i].d >> p[i].l;
//        flag = false;
//        dfs(N, 0, 0);
//        if (flag)
//            cout << "YES" << endl;
//        else
//            cout << "NO" << endl;
//    }
//    return 0;
//}

5.接龙序列

题意

竞赛中心 - 蓝桥云课 (lanqiao.cn)

思路

30%的用dfs应该可以

100%是DP

就类似于是最大连续子区间

假设 bef是第一位  aft是最后一位

code

#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstring>
#include<map>
#include<set>
#include<vector>
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define  long long
#define PI acos(-1.0)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<char,int> PCI;
const int INF = 1e18 + 10;
const int N = 1e5 + 10;
const int M = 1e7 + 10;
const int mod = 1e9 + 7;
int n, m, k;
int qcal(int a, int b) { int res = 1; while (b) { if (b & 1) res = res * a % mod; b >>= 1; a = a * a % mod; } return res; }
int a[N],f[N];
bool is_prime(int n) { if (n < 2) return false; for (int i = 2; i <= n / i; i++) { if (n % i == 0) { return false; } }return true; }
int ans = 0;
void gzy()
{
    cin >> n;
    for(int i = 1;i <= n;i ++) cin >> a[i];
    for(int i = 1;i <= n;i ++)
    {
        int len = 0,now = a[i];
        while(now)
        {
            len ++;
            now /= 10;
        }
        // cout << len << endl;
        int ch = 1;
        for(int j = 1;j < len;j ++) ch *= 10;
        int aft = a[i] % 10, bef = a[i] / ch;
        f[aft] = max(f[bef] + 1,f[aft]);
    }
    // for(int i = 0;i <= 9;i ++) cout << f[i] << ' ';
    // cout << endl;
    int maxid = *max_element(f,f+10);
    // cout << maxid << endl;
    cout << n - maxid << endl;
}                                                                      
signed main()
{
    IOS;
    int _ = 1;
    while (_--) gzy();
    return 0;
}

6.岛屿个数

题意

竞赛中心 - 蓝桥云课 (lanqiao.cn)

思路

先把所有最外圈的海标记为2 包括但凡连通的所有海

这样剩下来的海都是0 然后把他们都变成1

每次只需要统计连通块 1 的个数即可

code

#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstring>
#include<map>
#include<set>
#include<vector>
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define  long long
#define PI acos(-1.0)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<char,int> PCI;
const int INF = 1e18 + 10;
const int N = 1e5 + 10;
const int M = 1e7 + 10;
const int mod = 1e9 + 7;
int n, m, k;
int qcal(int a, int b) { int res = 1; while (b) { if (b & 1) res = res * a % mod; b >>= 1; a = a * a % mod; } return res; }
int a[N],f[N];
bool is_prime(int n) { if (n < 2) return false; for (int i = 2; i <= n / i; i++) { if (n % i == 0) { return false; } }return true; }
int ans = 0;
string ilen[51];
int dx[4] = {0,0,1,-1},dy[4] = {1,-1,0,0};
int dx1[8] = {-1,-1,0,1,1,1,0,-1},dy1[8] = {0,-1,-1,-1,0,1,1,1};
void bfs(int x,int y)
{
    queue<PII> q;
    q.push({x,y});
    while(!q.empty())
    {
        PII tmp = q.front();
        q.pop();
        for(int i = 0;i < 8;i ++)
        {
            int nx = tmp.first + dx1[i];
            int ny = tmp.second + dy1[i];
            if(nx >= 0 && nx < n && ny >= 0 && ny < m && ilen[nx][ny] == '0')
            {
                ilen[nx][ny] = '2';
                q.push({nx,ny});    
            }
        }
    }
}

void bfsd(int x,int y)
{
    queue<PII> q;
    q.push({x,y});
    while(!q.empty())
    {
        PII tmp = q.front();
        q.pop();
        for(int i = 0;i < 4;i ++)
        {
            int nx = tmp.first + dx[i],ny = tmp.second + dy[i];
            if(nx >= 0 && nx < n && ny >= 0 && ny < m && ilen[nx][ny] == '1')
            {
                ilen[nx][ny] = '0';
                q.push({nx,ny});
            }
        }
    }
}

void gzy()
{
    cin >> n >> m;
    for(int i = 0;i < n;i ++) cin >> ilen[i];
    ans = 0;
    // 先把海水打上2的标记
    for(int i = 0;i < m;i ++)
        if(ilen[0][i] == '0') 
        {
            ilen[0][i] = '2';
            bfs(0,i);
        }
    for(int i = 0;i < m;i ++)
        if(ilen[n-1][i] == '0') 
        {
            ilen[n-1][i] = '2';
            bfs(n-1,i);
        }
    for(int i = 0;i < n;i ++)
        if(ilen[i][0] == '0') 
        {
            ilen[i][0] = '2';
            bfs(i,0);
        }
    for(int i = 0;i < n;i ++)
        if(ilen[i][m-1] == '0')
        {
            ilen[i][m-1] = '2';
             bfs(i,m-1);
        }
    // for(int i = 0;i < n;i ++)
    //     cout << ilen[i] << endl;

    // 接下来需要填充岛屿 ---
    for(int i = 0;i < n;i ++)
        for(int j = 0;j < m;j ++)
            if(ilen[i][j] == '0') ilen[i][j] = '1';
    
    // 之后找到1块
    for(int i = 0;i < n;i ++)
    {
        for(int j = 0;j < m;j ++)
        {
            if(ilen[i][j] == '1')
            {
                ilen[i][j] = '0';
                ans ++;
                bfsd(i,j);    
            } 
        }
    }
    // for(int i = 0;i < n;i ++)
    //     cout << ilen[i] << endl;
    cout << ans << endl;
}                                                                      
signed main()
{
    IOS;
    int _ = 1; cin >> _;
    while (_--) gzy();
    return 0;
}


7.字串简写

题意

竞赛中心 - 蓝桥云课 (lanqiao.cn)

思路

最简单的一题了 哎比第一题简单多了

code

#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstring>
#include<map>
#include<set>
#include<vector>
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define  long long
#define PI acos(-1.0)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<char,int> PCI;
const int INF = 1e18 + 10;
const int N = 1e5 + 10;
const int M = 1e7 + 10;
const int mod = 1e9 + 7;
int n, m, k;
int qcal(int a, int b) { int res = 1; while (b) { if (b & 1) res = res * a % mod; b >>= 1; a = a * a % mod; } return res; }
int a[N],f[N];
bool is_prime(int n) { if (n < 2) return false; for (int i = 2; i <= n / i; i++) { if (n % i == 0) { return false; } }return true; }
int ans = 0;
void gzy()
{
    string st;
    cin >> k >> st;
    n = st.size();
    char be,af; cin >> be >> af;
    // cout << be << ' ' << af << endl;
    vector<int> vbe,vaf;
    for(int i = 0;i < n;i ++)
    {
        // if(st[i] == be) vbe.push_back(i);
        if(st[i] == af) vaf.push_back(i);
    }
    // for(auto c:vaf) cout << c << ' ';
    // cout << endl;
    int sum = 0,len = vaf.size();
    for(int i = 0;i < n;i ++)
    {
        if(st[i] == be)
        {
            if(lower_bound(vaf.begin(),vaf.end(),i + k - 1) != vaf.end())
            {
                int idx = lower_bound(vaf.begin(),vaf.end(),i + k - 1) - vaf.begin();
                // cout << idx << endl;
                sum += len - idx;
            }
        }
    }
    cout << sum << endl;
}                                                                      
signed main()
{
    IOS;
    int _ = 1;
    while (_--) gzy();
    return 0;
}

8.整数删除

题意

竞赛中心 - 蓝桥云课 (lanqiao.cn)

思路

优先队列维护 注意到k次就停!

code

#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstring>
#include<map>
#include<set>
#include<vector>
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define  long long
#define PI acos(-1.0)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<char,int> PCI;
const int INF = 1e18 + 10;
const int cmp = 1e17;
const int N = 5e5 + 10;
const int M = 1e7 + 10;
const int mod = 1e9 + 7;
int n, m, k;
int qcal(int a, int b) { int res = 1; while (b) { if (b & 1) res = res * a % mod; b >>= 1; a = a * a % mod; } return res; }
int a[N],f[N];
PII b[N];
bool is_prime(int n) { if (n < 2) return false; for (int i = 2; i <= n / i; i++) { if (n % i == 0) { return false; } }return true; }
void gzy()
{
    cin >> n >> k;
    for(int i = 1;i <= n;i ++) 
    {
        cin >> a[i];
        b[i] = {a[i],i};
    }
    priority_queue<PII,vector<PII>,greater<PII> > q;
    for(int i = 1;i <= n;i ++) q.push(b[i]);
    while(k > 0)
    {
        PII t = q.top();
        q.pop();
        int val = t.first, idx = t.second;
        if(t.first != a[t.second])
        {
             q.push({a[idx],idx});
             continue;
        }
        int l = idx-1,r = idx + 1;
        while(l >= 1 && a[l] == INF)
        {
            l --;
        }
        if(l >= 1) a[l] += a[idx];
        while(r <= n && a[r] == INF)
        {
            r ++;
        }
        if(r <= n) a[r] += a[idx];
        a[idx] = INF;
        k --;
        // for(int i = 1;i <= n;i ++)
        // {
        //     if(a[i] < cmp) cout << a[i] << ' ';
        // }
        // cout << endl;
    }
    for(int i = 1;i <= n;i ++)
    {
        if(a[i] < cmp) cout << a[i] << ' ';
    } 
    // cout << endl;
}                                                                      
signed main()
{
    IOS;
    int _ = 1;
    while (_--) gzy();
    return 0;
}

9.景区导游

题意

竞赛中心 - 蓝桥云课 (lanqiao.cn)

思路

40%的数据 dfs过

dfs模拟最短路 记录在数组预处理一下

code

//https://www.lanqiao.cn/problems/3516/learning/?subject_code=1&group_code=4&match_num=14&match_flow=1&origin=cup&page=1
#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstring>
#include<map>
#include<set>
#include<vector>
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define  long long
#define PI acos(-1.0)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<char,int> PCI;
const int INF = 1e18 + 10;
const int cmp = 1e17;
const int N = 5e5 + 10;
const int M = 1e7 + 10;
const int mod = 1e9 + 7;
int n, m, k;
int qcal(int a, int b) { int res = 1; while (b) { if (b & 1) res = res * a % mod; b >>= 1; a = a * a % mod; } return res; }
int a[N],f[N];
bool is_prime(int n) { if (n < 2) return false; for (int i = 2; i <= n / i; i++) { if (n % i == 0) { return false; } }return true; }
// PII dist[N];  //存放两点间距离
map<PII,int> dist;
vector<vector<PII>> ve(N); // 存放下一个点的idx和距离
int ido[N];
int sum = 0,minid = INF;
void dfs(int now,int gol,int fa,int cost)
{
    if(now == gol)
    {
        minid = min(cost,minid);
        return;
    }
    for(PII tmp:ve[now])
    {
        int nxt = tmp.first, mny = tmp.second;
        if(nxt != fa)
        {
            dfs(nxt,gol,now,cost + mny);
        }
    }
}

void gzy()
{
    int x,y,z;
    cin >> n >> k; // k个
    for(int i = 1;i < n;i ++)
    {
        cin >> x >> y >> z;
        ve[x].push_back({y,z});
        ve[y].push_back({x,z});
    }
    for(int i = 1;i <= k;i ++) cin >> ido[i];
    // 求出来sum
    for(int i = 1;i < k;i ++)
    {
        minid = INF;
        dfs(ido[i],ido[i+1],0,0);
        dist[{ido[i],ido[i+1]}] = minid;
        sum += minid;
    }
    // cout << sum << endl;
    for(int i = 1;i <= k;i ++)
    {
        int ans;
        if(i == 1)
            ans = sum - dist[{ido[i],ido[i+1]}];
        else if(i == k)
             ans = sum - dist[{ido[i-1],ido[i]}];

        else
        {
            minid = INF;
            dfs(ido[i-1],ido[i+1],0,0);
            ans = sum - dist[{ido[i-1],ido[i]}] - dist[{ido[i],ido[i+1]}] + minid;
        }
        cout << ans << ' ';
    }
}                                                                      
signed main()
{
    IOS;
    int _ = 1;
    while (_--) gzy();
    return 0;
}

10.砍树

题意

竞赛中心 - 蓝桥云课 (lanqiao.cn)

思路

30%的数据:枚举每一次要删除哪个边 然后跑dfs

code

#include<iostream>
#include<cstdio>
#include<stack>
#include<vector>
#include<algorithm>
#include<cmath>
#include<queue>
#include<cstring>
#include<map>
#include<set>
#include<vector>
#define int long long
#define IOS ios::sync_with_stdio(false),cin.tie(0),cout.tie(0)
#define  long long
#define PI acos(-1.0)
using namespace std;
typedef long long ll;
typedef pair<int, int> PII;
typedef pair<char,int> PCI;
const int INF = 1e18 + 10;
const int N = 3e5 + 10;
const int M = 1e7 + 10;
const int mod = 1e9 + 7;
int n, m, k, ans;
int qcal(int a, int b) { int res = 1; while (b) { if (b & 1) res = res * a % mod; b >>= 1; a = a * a % mod; } return res; }
bool is_prime(int n) { if (n < 2) return false; for (int i = 2; i <= n / i; i++) { if (n % i == 0) { return false; } }return true; }
int sum = 0;
PII ed[N],shu[N];
bool flag = 1;
vector<vector<int>> ve(N);
void dfs(int u,int v,int end,int now,int fa)
{ 
	if(!flag) return;
    for(int c:ve[now])
    {
        if(c != fa)
        {
            if((c == u && now == v) || (c == v && now == u)) continue;
            if(c == end)
            {
                flag = 0;
                return;
            }
            dfs(u,v,end,c,now);
        }
    }
}

void gzy()
{
    cin >> n >> m;
    for(int i = 1;i < n;i ++)
    {
        int x,y; cin >> x >> y;
        shu[i].first = x,shu[i].second = y;
        ve[x].push_back(y);
        ve[y].push_back(x);
    }
    for(int i = 1;i <= m;i ++)
        cin >> ed[i].first >> ed[i].second;
    ans = -1;
    for(int i = 1;i < n;i ++)
    {
        flag = 1;
        for(int j = 1;j <= m;j ++)
        {
            dfs(shu[i].first,shu[i].second,ed[j].second,ed[j].first,0); // 删第几条边 然后现在需要判断第j个的连通性
            if(flag == 0) break;
        }
        if(flag) 
        {
            ans = i;
            flag = 0;
        }
    }
    cout << ans << endl;
}                                                                      
signed main()
{
    IOS;
    int _ = 1;
    while (_--) gzy();
    return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1546128.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一文看懂算法交易(二)

国内T0算法哪家强&#xff1f;算法交易费用是多少&#xff1f;算法交易哪些平台好&#xff1f; 我们接上文今天给大家继续分享&#xff0c;我们昨天大致了解了什么是算法交易&#xff0c;国内的算法总线大概有些啥&#xff0c;算法交易的类型。那么我们今天再普及下&#xff0c…

neo4j使用详解(三、cypher插入语法——最全参考)

1.插入语法 create, merge, set, delete, remove, create unique, load csv(import) 除插入语法外另外的语法详情请博主其他文章&#xff1a; 查询语法 其他语法 1.1.create语法 创建单个节点: create(n) # (ID:n) 创建带标签的节点: create (n:Person) # (ID:n, label:Perso…

Tableau项目实战-网站流量统计分析

数据介绍 网站流量分析.xlsx 1、页面指标分析 页面指标主要有网站流量指标、用户行为指标、用户浏览网站的方式等。 页面访问次数 访客完整打开网站页面进行访问的次数,访问次数是网站访问速度的衡量标准。 平均停留的时间 平均访问时长是用户访问网站的平均停留时间。 …

力扣HOT100 - 42. 接雨水

解题思路&#xff1a; 动态规划 感觉不是很好想 class Solution {public int trap(int[] height) {int n height.length;if (n 0) return 0;int[] leftMax new int[n];leftMax[0] height[0];for (int i 1; i < n; i) {leftMax[i] Math.max(leftMax[i - 1], height[i…

基于Springboot Vue医院管理系统+数据库脚本+文档(万字)

项目效果视频: 基于Springboot Vue医院管理系统 一、 项目介绍 角色&#xff1a;管理员、患者、医生 基于springboot vue实现的医院管理系统&#xff0c;有管理员、医生和患者三种角色。系统拥有丰富的功能&#xff0c;能够满足各类用户的需求&#xff0c;系统提供了登录和注册…

javaWeb学生宿舍管理系统

一、摘要 本博客介绍了如何使用Spring Boot和MySQL构建一个功能完善的JavaWeb学生宿舍管理系统。该系统分为三个角色&#xff1a;管理员、宿管和学生。管理员拥有对整个系统的全面管理权限&#xff0c;包括学生管理、宿舍管理、入住管理和管理员管理&#xff1b;宿管负责宿舍的…

线上linux服务器升级nginx

一个nginx版本空包 一个pcre文件 一个zlib文件 ./configure配置文件 make编译 make install复制所有文件到nginx 如果nginx -v无版本号 检查环境变量cat /etc/profile 编辑 环境变量vi /etc/profile 按i进入编辑模式 按esc进入查看模式 因为path中并未使用%JAVA_HOME%字样…

QMT量化交易上手

文章目录 QMT介绍基本使用代码初始化股票和行情交易量化策略示例相关链接QMT介绍 QMT是迅投公司出品量化交易客户端软件,目前只能运行在windows机器上,分为QMT 和 miniQMT两种模式,后者可以采用python API做程序化交易,极大方便了广大散户。这点上比同花顺/通信达好很多。…

在 IntelliJ IDEA 中使用 Terminal 执行 git log 命令后的退出方法

前言 IntelliJ IDEA 是一款广受欢迎的集成开发环境&#xff0c;它内置了强大的终端工具&#xff0c;使得开发者无需离开IDE就能便捷地执行各种命令行操作&#xff0c;包括使用 Git 进行版本控制。在 IDEA 的 Terminal 中执行 git log 命令时&#xff0c;由于该命令会显示项目的…

微信登录开发

1、h5页面增加一个微信登录&#xff0c;省去手机号验证码登录的繁琐。 首先需要开通服务号&#xff0c;我用的是公司的服务号&#xff0c;开发的小伙伴可以去找领导开通。开通后把自己的微信号加进去就可以进行下面的步骤了。 在微信开发者平台上的公众号设置中去设置业务域名、…

四、C语言中的数组:二维数组

四、C语言中的数组&#xff1a;二维数组 本章的学习内容如下&#xff1a; 四、C语言中的数组&#xff1a;数组的创建与初始化 四、C语言中的数组&#xff1a;数组的输入与元素个数 C语言—第6次作业—十道代码题掌握一维数组 四、C语言中的数组&#xff1a;二维数组 我们可以…

力扣刷题44-46(力扣0062/0152/0198)

62. 不同路径 题目描述&#xff1a; 一个机器人位于一个 m x n 网格的左上角 &#xff0c;机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角。问总共有多少条不同的路径&#xff1f; 思路&#xff1a; 其实就是问(0,0)->(m-1,n-1)一共有几条路。 第一个…

30岁失业的我,选择职场转型,进入AIGC工程师领域,重新开始

去年&#xff0c;刚满30岁的我又一次被公司辞退了&#xff0c;由于学历不高&#xff0c;简历也不出彩&#xff0c;尽管半个月来投了一份又一份的简历&#xff0c;但仍然是石沉大海&#xff0c;我终于不得不开始思考一个以前被我一直刻意压制的想法——职场转型。 尽管知道这条…

docker (一)

1&#xff0c;什么是docker 首先我们可以好好的看看docker的那个可能的图标&#xff0c;你想象到了什么&#xff1f; ... docker是一个开源的应用容器引擎&#xff0c;有Docker公司&#xff08;前dotCloud公司&#xff09;开发&#xff0c;基于Apache2.0开源授权协议发行。该…

碳实践|企业组织碳排放源识别方法、案例分析,及注意事项

在上一章中讲到“界、源、算、质、查”五步法实现企业组织碳的完整核算流程&#xff0c;本章将针对其中的“源”- “识别排放源”这一步骤来展开,主要分析其识别方法、实操案例&#xff0c;并列举注意事项。 企业识别碳排放源是指在组织边界内找到产生碳排放的设施&#xff0c;…

算法沉淀 —— 动态规划篇(路径问题)

算法沉淀 —— 动态规划篇&#xff08;路径问题&#xff09; 前言一、不同路径1二、珠宝的最高价值三、下降路径最小和四、地下城游戏 前言 几乎所有的动态规划问题大致可分为以下5个步骤&#xff0c;后续所有问题分析都将基于此 1.、状态表示&#xff1a;通常状态表示分为以下…

登录校验解决方案JWT

目录 &#x1f397;️1.JWT介绍 &#x1f39e;️2.应用场景 &#x1f39f;️3.结构组成 &#x1f3ab;4.JWT优点 &#x1f3a0;5.封装成通用方法 &#x1f6dd;6.JWT自动刷新 1.JWT介绍 官网&#xff1a;JWT官网 JSON Web Token (JWT) 是一个开放标准&#xff0c;它…

C语言:编译与链接

目录 前言1. 翻译环境与运行环境2.翻译环境&#xff1a;预编译编译汇编链接3. 运行环境 前言 我们写一个程序&#xff0c;例如test.c或是test.h这些源文件&#xff0c;头文件&#xff0c;事实上这些代码都是文本文件&#xff0c;但是计算机能够看得懂&#xff0c;并且直接执行…

C#代码混淆器 ipaguard 的优势与使用

摘要 本文探讨了iOS开发的优势、费用以及软件开发方面的相关内容。通过分析iOS开发所采用的编程语言、开发环境、用户界面设计、应用审核流程以及应用领域等方面&#xff0c;展示了iOS开发的诸多优势和特点。虽然iOS开发具有高用户体验、统一的硬件和软件环境、良好的市场份额等…

uni-app中web-view的使用

1. uni-app中web-view的使用 uni-app中的web-view是一个 web 浏览器组件&#xff0c;可以用来承载网页的容器&#xff0c;uni-app开发的app与web-view实现交互的方式相关简单&#xff0c;应用通过属性message绑定触发事件&#xff0c;然后在web-view的网页向应用 postMessage 触…