TLE on test 16
查看原帖
TLE on test 16
674967
xz001楼主2024/5/1 20:14

#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3, "Ofast", "inline")

#include<bits/stdc++.h>

using namespace std;

#define re			register
#define fi			first
#define se			second
#define swap(a, b) 	a ^= b, b ^= a, a ^= b
#define pb 			push_back
#define all(x)		x.begin(), x.end()
#define max(a, b)	(a > b ? a : b)
#define min(a, b)	(a < b ? a : b)
#define il			inline

typedef pair<int, int> PII;

const int N = 1e6 + 149040;
const int M = 1e6 + 10;
const int INF = 1e18, mod = 1145141;
const double eps = 1e-6;

int n, m, d[105][105], f[21][2 * N], g[2 * N];

inline int dfs (const int i, const int s) {
	if (g[s] == n) return 0;
	if (f[i][s] != -1) return f[i][s];
	register int ans = 1e9;
	for (register int j = 1; j <= n; ++ j ) 
		if (!(s & (1 << j)) && d[i][j] < 1e8) 
		    ans = min(ans, dfs (j, s | (1 << j)) + d[i][j]);
	
	return f[i][s] = ans;
}

signed main() {
	for (register int i = 1; i < 2 * N; ++ i ) {
		register int x = i;
		while (x) {
			++ g[i];
			x ^= x & -x;
		}
	}
	memset(f, -1, sizeof(f));
	scanf("%d%d", &n, &m);
	for (register int i = 1; i <= n; ++ i )
	    for (register int j = 1; j <= n; ++ j )
	        d[i][j] = 1e9;
	        
	for (register int i = 1; i <= n; ++ i ) d[i][i] = 0;
	while (m -- ) {
		register int u, v, w;
		scanf("%d%d%d", &u, &v, &w);
		d[u][v] = w; 
	}
	for (register int k = 1; k <= n; ++ k )
	    for (register int i = 1; i <= n; ++ i )
	        for (register int j = 1; j <= n; ++ j )
	            d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
    
    bool f = true;
	for (int i = 1; i <= n; ++ i ) {
		bool is = true;
		for (int j = 1; j <= n; ++ j ) is &= d[i][j] < 1e8;
		if (is) {
			f = false;
			break;
		}
	}
	if (f) {
		puts("No");
		return 0;
	}
	register int ans = 1e9;
	for (register int i = 1; i <= n; ++ i ) {
		bool is = true;
		for (int j = 1; j <= n; ++ j ) is &= d[i][j] < 1e8;
		if (is) ans = min(ans, dfs (i, 1 << i));
	}
	if (ans > 1e8) puts("No");
	else printf("%d\n", ans);
    return 0;
}

2024/5/1 20:14
加载中...