【洛谷】AT_abc371_c [ABC371C] Make Isomorphic 的题解

【洛谷】AT_abc371_c [ABC371C] Make Isomorphic 的题解

洛谷传送门

AT传送门

题解

抽象题目,抽象翻译,可能是我太菜了,根本没看懂题目,后面是听大佬讲题才发现,这不就是一题全排列暴力题吗。谔谔,真的我谔谔!!!怪不得评橙!!???!!!

首先先看题目意思:

给定简单无向图 G G G H H H ,每个图都有 N N N 个顶点。 G G G M M M 条边; H H H M M M 条边。

  • H H H i i i j j j 间无边,则添加边;

  • H H H i i i j j j 间有边,则删除边。

求使 G G G H H H 同构的最小总成本。

题目非常的抽象,刚开始在研究半天同构到底是什么意思qaq

题目数据范围很小,只有 $ n \le 8$。所以直接暴力全排列取出最小值即可。时间复杂度 O ( n ! ) O(n!) O(n!)脑抽想了快一个小时,还是大佬教的代码

代码

#include <bits/stdc++.h>
#define lowbit(x) x & (-x)
#define endl "\n"
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
namespace fastIO {
	inline int read() {
		register int x = 0, f = 1;
		register char c = getchar();
		while (c < '0' || c > '9') {
			if(c == '-') f = -1;
			c = getchar();
		}
		while (c >= '0' && c <= '9') x = x * 10 + c - '0', c = getchar();
		return x * f;
	}
	inline void write(int x) {
		if(x < 0) putchar('-'), x = -x;
		if(x > 9) write(x / 10);
		putchar(x % 10 + '0');
		return;
	}
}
using namespace fastIO;
int n, m1, m2, G[15][15], H[15][15], edge[15][15], p[] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
ll ans = 0x3f3f3f3f3f3f;
int main() {
	//freopen(".in","r",stdin);
	//freopen(".out","w",stdout);
	n = read(), m1 = read();
	for(int i = 1; i <= m1; i ++) {
		int u, v;
		u = read(), v = read();
		G[u][v] = G[v][u] = 1;
	}
	m2 = read();
	for(int i = 1; i <= m2; i ++) {
		int u, v;
		u = read(), v = read();
		H[u][v] = H[v][u] = 1;
	}
	for(int i = 1; i < n; i ++) {
		for(int j = i + 1; j <= n; j ++) {
			edge[i][j] = read();
		}
	}
	do {
		ll temp = 0;
		for(int i = 1; i <= n; i ++) {
			for(int j = 1; j <= n; j ++) {
				if(i != j) {
					temp += edge[i][j] * (G[p[i]][p[j]] != H[i][j]);
				}	
			}		
		}
		ans = min(ans, temp);
	} while(next_permutation(p + 1, p + n + 1));
	cout << ans << endl;
	return 0;
}
### 创建同构应用程序或实现在 JavaScript 框架中的同构特性 #### 同构应用的概念 同构(Isomorphic)应用是指可以在服务器端和客户端运行相同代码的应用程序。这种架构允许页面首次加载时由服务器渲染 HTML,之后切换到完全在浏览器中执行的单页应用 (SPA),从而提供更快的初始加载时间和更好的 SEO 支持。 #### 使用 Next.js 实现同构功能 Next.js 是 React 的框架之一,专为服务端渲染 (SSR) 和静态站点生成而设计。通过简单的配置即可启用 SSR 功能: ```javascript // pages/index.js import Head from 'next/head' export default function Home({ data }) { return ( <> <Head> <title>My Isomorphic App</title> </Head> <main> <h1>Data fetched at build time:</h1> <pre>{JSON.stringify(data, null, 2)}</pre> </main> </> ) } export async function getServerSideProps() { const res = await fetch('https://api.example.com/data') const data = await res.json() return { props: { data } } } ``` 此示例展示了如何利用 `getServerSideProps` 方法来获取数据并将其作为属性传递给组件,在初次请求时于服务器上完成渲染[^1]。 #### 使用 Nuxt.js 实现同构功能 Nuxt.js 则是基于 Vue 构建的服务端渲染解决方案。它提供了更高级别的抽象层以及内置的功能支持,使得开发更加便捷高效: ```javascript // pages/index.vue <template> <div> <h1>Data Fetched on Server Side Render:</h1> <p>{{ info }}</p> </div> </template> <script> export default { asyncData(context) { return new Promise((resolve, reject) => { setTimeout(() => { resolve({ info: 'This content was rendered by server.' }) }, 1000); }); }, }; </script> ``` 上述代码片段说明了怎样借助 `asyncData` 函数实现异步数据抓取,并确保这些操作仅发生在服务端。 #### 关键技术要点 为了成功构建同构应用,需注意以下几点: - **路由管理**:确保前后端一致性的 URL 路径解析机制; - **状态同步**:维持全局共享的状态容器如 Vuex 或 Redux 来保持会话间的数据一致性; - **API 请求处理**:采用统一的方式发起 HTTP 请求,无论是在客户端还是服务端; 通过遵循以上原则和技术实践,可以有效地创建具有出色性能表现和服务质量保障的同构 Web 应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值