• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
jacklee404
Never Stop!
博客园    首页    新随笔    联系   管理    订阅  订阅
L2-4 网红点打卡攻略

思路

模拟一下:

注意点:

  1. 注意开始结点0,结尾0

  2. 记录一下访问次数0可以访问2次, 且仅在尾处可以访问

  3. 变量多,注意命名

Code

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
#define siz(x) (int)x.size()
#define IOS ios::sync_with_stdio(false);
#define rep(i, j, k) for(int i = j; i <= k; ++ i)
#define per(i, j, k) for(int i = j; i >= k; -- i)
#define dbg1(a) cout << a << endl;
#define dbg2(a, b) cout << a << " " <<  b << endl;
#define dbg3(a, b, c) cout << a << " " << b << " " << c << endl;
#define pb(x) push_back(x)
#define eb(x) emplace_back(x)
#define all(x) x.begin(), x.end()
#define f first
#define s second
#define lc p<<1
#define rc p<<1|1
using namespace std;
typedef long long LL;
typedef priority_queue<int, vector<int>, greater<int>> S_HEAP;
typedef priority_queue<int> B_HEAP; 
typedef pair<string, int> PSI;
typedef pair<int, int> PII;
const int N = 1e5 + 10;

int v[300][300], arr[300], vis[300], mi, mc = INF, ct = 0;

int n, m;

int add(int a, int b) {
	if (a != -1 && b != -1) {
		return a + b;
	} else {
		return -1;
	}
}

void solve(int k1) {
	memset(vis, 0, sizeof vis);
	int n1, cost = 0, cnt = 0;
	vector<int> a;
	cin >> n1;
	a.push_back(0);
	for (int i = 1; i <= n1; i ++){
		int t; 
		cin >> t;
		a.push_back(t);
	}
	a.push_back(0);
	for (int i = 0; i < a.size(); i ++) {
		if (a[i] == 0 && vis[a[i]] == 2) {
			return;
		} else if (a[i] != 0 && vis[a[i]]) {
            return;
        }
		vis[a[i]] ++;
		if (i >= 1) {
			if (add(cost, v[a[i - 1]][a[i]]) == -1) {
				return;
			}
			cost = add(cost, v[a[i - 1]][a[i]]);
		}
		if (a[i] != 0)
		cnt ++;
	}
    if (cnt == n) {
        if (cost < mc) {
            mi = k1;
            mc = cost;
        }
        ct ++;
    }
}

int main() {
	int cnt = 0, mcost = INF;
	cin >> n >> m;
	memset(v, -1, sizeof v);
	for (int i = 1; i <= m; i ++) {
		int a, b, c; 
		cin >> a >> b >> c;
		v[a][b] = c, v[b][a] = c;
	}
	int q; cin >> q;
	vector<int> b;
	for (int k = 1; k <= q; k ++) {
		solve(k);
	}
	cout << ct << "\n";
	cout << mi << " " << mc;
}
posted on 2022-12-25 18:36  Jack404  阅读(31)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3