首页 > 其他分享 >「NOI2007」社交网络

「NOI2007」社交网络

时间:2024-03-28 15:36:15浏览次数:27  
标签:cnt int void 网络 NOI2007 cerr print 社交 dis

floyd #最短路

floyd 维护最短路和方案即可

因为 floyd 的本质是一个每次加入一个点的 dp ,所以这样的统计是不会重复计算的

// Author: xiaruize
#ifndef ONLINE_JUDGE
bool start_of_memory_use;
#else
#define debug(x)
#endif
#include <bits/stdc++.h>
using namespace std;
#ifndef ONLINE_JUDGE
clock_t start_clock = clock();
#endif
namespace __DEBUG_UTIL__
{
	using namespace std;
	/* Primitive Datatypes Print */
	void print(const char *x) { cerr << x; }
	void print(bool x) { cerr << (x ? "T" : "F"); }
	void print(char x) { cerr << '\'' << x << '\''; }
	void print(signed short int x) { cerr << x; }
	void print(unsigned short int x) { cerr << x; }
	void print(signed int x) { cerr << x; }
	void print(unsigned int x) { cerr << x; }
	void print(signed long int x) { cerr << x; }
	void print(unsigned long int x) { cerr << x; }
	void print(signed long long int x) { cerr << x; }
	void print(unsigned long long int x) { cerr << x; }
	void print(float x) { cerr << x; }
	void print(double x) { cerr << x; }
	void print(long double x) { cerr << x; }
	void print(string x) { cerr << '\"' << x << '\"'; }
	template <size_t N>
	void print(bitset<N> x) { cerr << x; }
	void print(vector<bool> v)
	{ /* Overloaded this because stl optimizes vector<bool> by using
		  _Bit_reference instead of bool to conserve space. */
		int f = 0;
		cerr << '{';
		for (auto &&i : v)
			cerr << (f++ ? "," : "") << (i ? "T" : "F");
		cerr << "}";
	}
	/* Templates Declarations to support nested datatypes */
	template <typename T>
	void print(T &&x);
	template <typename T>
	void print(vector<vector<T>> mat);
	template <typename T, size_t N, size_t M>
	void print(T (&mat)[N][M]);
	template <typename F, typename S>
	void print(pair<F, S> x);
	template <typename T, size_t N>
	struct Tuple;
	template <typename T>
	struct Tuple<T, 1>;
	template <typename... Args>
	void print(tuple<Args...> t);
	template <typename... T>
	void print(priority_queue<T...> pq);
	template <typename T>
	void print(stack<T> st);
	template <typename T>
	void print(queue<T> q);
	/* Template Datatypes Definitions */
	template <typename T>
	void print(T &&x)
	{
		/*  This works for every container that supports range-based loop
			i.e. vector, set, map, oset, omap, dequeue */
		int f = 0;
		cerr << '{';
		for (auto &&i : x)
			cerr << (f++ ? "," : ""), print(i);
		cerr << "}";
	}
	template <typename T>
	void print(vector<vector<T>> mat)
	{
		int f = 0;
		cerr << "\n~~~~~\n";
		for (auto &&i : mat)
		{
			cerr << setw(2) << left << f++, print(i), cerr << "\n";
		}
		cerr << "~~~~~\n";
	}
	template <typename T, size_t N, size_t M>
	void print(T (&mat)[N][M])
	{
		int f = 0;
		cerr << "\n~~~~~\n";
		for (auto &&i : mat)
		{
			cerr << setw(2) << left << f++, print(i), cerr << "\n";
		}
		cerr << "~~~~~\n";
	}
	template <typename F, typename S>
	void print(pair<F, S> x)
	{
		cerr << '(';
		print(x.first);
		cerr << ',';
		print(x.second);
		cerr << ')';
	}
	template <typename T, size_t N>
	struct Tuple
	{
		static void printTuple(T t)
		{
			Tuple<T, N - 1>::printTuple(t);
			cerr << ",", print(get<N - 1>(t));
		}
	};
	template <typename T>
	struct Tuple<T, 1>
	{
		static void printTuple(T t) { print(get<0>(t)); }
	};
	template <typename... Args>
	void print(tuple<Args...> t)
	{
		cerr << "(";
		Tuple<decltype(t), sizeof...(Args)>::printTuple(t);
		cerr << ")";
	}
	template <typename... T>
	void print(priority_queue<T...> pq)
	{
		int f = 0;
		cerr << '{';
		while (!pq.empty())
			cerr << (f++ ? "," : ""), print(pq.top()), pq.pop();
		cerr << "}";
	}
	template <typename T>
	void print(stack<T> st)
	{
		int f = 0;
		cerr << '{';
		while (!st.empty())
			cerr << (f++ ? "," : ""), print(st.top()), st.pop();
		cerr << "}";
	}
	template <typename T>
	void print(queue<T> q)
	{
		int f = 0;
		cerr << '{';
		while (!q.empty())
			cerr << (f++ ? "," : ""), print(q.front()), q.pop();
		cerr << "}";
	}
	/* Printer functions */
	void printer(const char *) {} /* Base Recursive */
	template <typename T, typename... V>
	void printer(const char *names, T &&head, V &&...tail)
	{
		/* Using && to capture both lvalues and rvalues */
		int i = 0;
		for (size_t bracket = 0; names[i] != '\0' and (names[i] != ',' or bracket != 0); i++)
			if (names[i] == '(' or names[i] == '<' or names[i] == '{')
				bracket++;
			else if (names[i] == ')' or names[i] == '>' or names[i] == '}')
				bracket--;
		cerr.write(names, i) << " = ";
		print(head);
		if (sizeof...(tail))
			cerr << " ||", printer(names + i + 1, tail...);
		else
			cerr << "]\n";
	}
	/* PrinterArr */
	void printerArr(const char *) {} /* Base Recursive */
	template <typename T, typename... V>
	void printerArr(const char *names, T arr[], size_t N, V... tail)
	{
		size_t ind = 0;
		for (; names[ind] and names[ind] != ','; ind++)
			cerr << names[ind];
		for (ind++; names[ind] and names[ind] != ','; ind++)
			;
		cerr << " = {";
		for (size_t i = 0; i < N; i++)
			cerr << (i ? "," : ""), print(arr[i]);
		cerr << "}";
		if (sizeof...(tail))
			cerr << " ||", printerArr(names + ind + 1, tail...);
		else
			cerr << "]\n";
	}
}
#ifndef ONLINE_JUDGE
#define debug(...) std::cerr << __LINE__ << ": [", __DEBUG_UTIL__::printer(#__VA_ARGS__, __VA_ARGS__)
#define debugArr(...) std::cerr << __LINE__ << ": [", __DEBUG_UTIL__::printerArr(#__VA_ARGS__, __VA_ARGS__)
#else
#define debug(...)
#define debugArr(...)
#endif
#define int long long
#define ull unsigned long long
#define ALL(a) (a).begin(), (a).end()
#define pb push_back
#define mk make_pair
#define pii pair<int, int>
#define pis pair<int, string>
#define sec second
#define fir first
#define sz(a) int((a).size())
#define Yes cout << "Yes" << endl
#define YES cout << "YES" << endl
#define No cout << "No" << endl
#define NO cout << "NO" << endl
#define mms(arr, n) memset(arr, n, sizeof(arr))
#define rep(i, a, n) for (int i = (a); i <= (n); ++i)
#define per(i, n, a) for (int i = (n); i >= (a); --i)
int max(int a, int b)
{
	if (a > b)
		return a;
	return b;
}
int min(int a, int b)
{
	if (a < b)
		return a;
	return b;
}
const int INF = 0x3f3f3f3f3f3f3f3f;
const int MOD = 1000000007;
const int N = 100 + 10;

int n, m;
int dis[N][N], cnt[N][N];

void solve()
{
	cin >> n >> m;
	mms(dis, 0x3f);
	rep(i, 1, m)
	{
		int u, v, w;
		cin >> u >> v >> w;
		dis[u][v] = dis[v][u] = min(dis[u][v], w);
		cnt[u][v] = cnt[v][u] = 1;
	}
	rep(i, 1, n)
	{
		dis[i][i] = 0;
		// cnt[i][i] = 1;
	}
	rep(k, 1, n)
	{
		rep(i, 1, n)
		{
			rep(j, 1, n)
			{
				if (dis[i][j] > dis[i][k] + dis[k][j])
				{
					dis[i][j] = dis[i][k] + dis[k][j];
					cnt[i][j] = cnt[i][k] * cnt[k][j];
				}
				else if (dis[i][j] == dis[i][k] + dis[k][j])
				{
					cnt[i][j] += cnt[i][k] * cnt[k][j];
				}
			}
		}
	}
	rep(i, 1, n)
	{
		double res = 0;
		rep(s, 1, n)
		{
			rep(t, 1, n)
			{
				if (s == i || i == t || s == t)
					continue;
				if (dis[s][t] == dis[s][i] + dis[i][t])
				{
					res += (double)cnt[s][i] * (double)cnt[i][t] / (double)cnt[s][t];
				}
			}
		}
		cout << fixed << setprecision(3) << res << endl;
	}
}

#ifndef ONLINE_JUDGE
bool end_of_memory_use;
#endif

signed main()
{
	freopen("network.in","r",stdin);
	freopen("network.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	int testcase = 1;
	// cin >> testcase;
	while (testcase--)
		solve();
#ifndef ONLINE_JUDGE
	cerr << "Memory use:" << (&end_of_memory_use - &start_of_memory_use) / 1024.0 / 1024.0 << "MiB" << endl;
	cerr << "Time use:" << (double)clock() / CLOCKS_PER_SEC * 1000.0 << "ms" << endl;
#endif
	return 0;
}

标签:cnt,int,void,网络,NOI2007,cerr,print,社交,dis
From: https://www.cnblogs.com/xiaruize/p/18101831

相关文章

  • 车载以太网AVB交换机 TSN交换机 时间敏感网络 6端口 百兆 SW100TSN
    SW100TSN时间敏感网络AVB交换机        为6端口百兆车载以太网交换机,其中包含5通道100BASE-T1泰科MATEnet接口和1个通道100/1000BASE-T标准以太网(RJ45接口),可以实现纳米级时间同步,车载以太网多通道交换,Bypass数据采集和监控等功能,支持TSN/AVB协议,边界时钟,gPTP时钟桥......
  • 如何防范因网络泄密和设备丢失等情况导致的数据泄密?
    根据我们的华企盾DSC数据防泄密系统和实践经验,这是一篇有关于如何防范因网络泄密和设备丢失等情况导致的数据泄密的文章。在信息安全领域,内部泄密是一个重大问题,特别是对于那些处理敏感数据的企业。根据IBMSecurity和Ponemon的研究,复杂设备丢失导致的数据泄露成本非常高,而企业......
  • 为什么SOTA网络在你的数据集上不行?来看看Imagnet结果的迁移能力研究
     论文通过实验证明,ImageNet上的模型并不总能泛化到其他数据集中,甚至可能是相反的,而模型的深度和宽度也会影响迁移的效果。 如果需要参考,可选择类别数与当前任务相似的数据集上的模型性能。论文通过大量的实验来验证猜想,虽然没有研究出如通过数据集间的某些特性来直接判断模型......
  • 网络时间同步产品(时间同步系统)让计算机域更精准
    网络时间同步产品(时间同步系统)让计算机域更精准网络时间同步产品(时间同步系统)让计算机域更精准京准电子科技官微——ahjzsz有不少自学成才的电脑专家还是有经过系统性训练的电脑专家,大部份的电脑专家都折腾过WindowsServer系列的服务器操作系统,有人用盗版的服务器操作系统组成......
  • 网络安全体系框架
    网络安全体系框架目录一、引言1.网络安全问题的提出-------------------------------------------------2.网络安全体系框架设计的重要性---------------------------------------二、网络安全体系框架的设计理念1.总体设计理念---------------------------------------......
  • 网络安全2024年为什么如此吃香?事实原来是这样....
    前言由于我国网络安全起步晚,所以现在网络安全工程师十分紧缺。俗话说:‘‘没有网络安全就没有国家安全’’为什么选择网络安全?十四五发展规划建议明确提出建设网络强国,全面加强网络安全保障体系和能力建设,加强网络文明建设,发展积极健康的网络文化。这是国家从战略高度把......
  • 0基础小白想转行做网络安全,该自学还是报班呢?
    伴随着时代的飞速发展,网络安全已在各个领域得到了广泛的应用,现已成为众多人心仪的热门行业。但由于网络安全行业的岗位大多数都是纯技术岗,导致很多人都在担心:0基础学网络安全会不会很难?自学能不能学会?其实,网络安全涉及的知识面很广、术语和理论知识都比较多,除了网络硬件知......
  • 【计算机网络】应用层——应用层概念&网络应用模型
    应用层概述应用层对应用程序的通信提供服务。应用层协议定义:应用进程交换的报文类型,请求还是响应?各种报文类型的语法,如报文中的各个字段及其详细描述。字段的语义,即包含在字段中的信息的含义。进程何时、如何发送报文,以及对报文进行响应的规则。应用层的功能......
  • 【计算机网络】应用层——DNS系统
    DNS域名系统替代IP地址域名根顶级域名国家顶级域名cn,us,uk通用顶级域名com,net,org,gov,int,aero,museum,travel基础结构域名/反向域名arpa二级域名类别域名ac,com,edu,gov,mil,net,org行政区域名用于我国各省、自治区、直辖市bj,js自己注册的。域名......
  • 【计算机网络】应用层——万维网和HTTP协议
    万维网万维网www(WorldWideWeb)是一个大规模的、联机式的信息储藏所/资料空间,是无数个网络站点和网页的集合。资源(文字、视频、音频...)统一资源定位符URL,唯一标识资源!用户通过点击超链接(http://www.baidu.com)获取资源,这些资源通过超文本传输协议(HTTP)传送给使用者。......