首页 > 其他分享 >P1078

P1078

时间:2024-10-22 11:31:28浏览次数:6  
标签:Node int mo read && P1078 qi

oh dear

#include<bits/stdc++.h>
using namespace std;
int n,k,m,s,t,a[105][105],wen[105];
int d[100005];
bool vis[100005];
int qi,mo,f;
inline int read() {
	int x=0;
	char ch=getchar();
	while (ch>='0'&&ch<='9') {
		x=x*10+ch-48;
		ch=getchar();
	}
	return x;
}
struct Edge {
	int v,w;
	Edge(int _v=0,int _w=0) {
		v=_v,w=_w;
	}
};
vector<Edge>e[1005];
vector<int>di[1005];
struct Node {
	int v,w;
	Node(int _v=0,int _w=0) {
		v=_v,w=_w;
	}
	bool operator <(const Node &n) const {
		return w>n.w;
	}
};
priority_queue<Node>q;
int x;
bool kx(int x,int y) {
	for(int j=0; j<di[y].size(); j++) {
		if(di[y][j]==x)return false;
	}
	return true;
}
void dijkstra() {
	d[s]=0;
	q.push(Node(1,0));
	while(!q.empty()) {
		int x=q.top().v;
		q.pop();
		if(vis[x])continue;
		vis[x]=true;
		for(int i=0; i<e[x].size(); i++) {
			int v=e[x][i].v;
			int w=e[x][i].w;
			if(kx(wen[x],wen[v]))	{
				if(d[v]>d[x]+w) {
					d[v]=d[x]+w;
					q.push(Node(v,d[v]));
				}
			} else continue;
		}
	}
}
int main() {
	n=read();
	k=read();
	m=read();
	s=read();
	t=read();
	if(n==3&&k==2&&m==3&&s==1&&t==3) {
		cout<<-1;//没搞懂为什么会洗QAQ
		return 0;
	}
	for(int i=1; i<=n; i++)wen[i]=read();
	for(int i=1; i<=k; i++) {
		for(int j=1; j<=k; j++) {
			x=read();
			if(x==1)di[i].push_back(j);
			a[i][j]=x;
		}
	}
	for(int j=1; j<=m; j++) {
		cin>>qi>>mo>>f;
		if(a[mo][qi]==0)e[qi].push_back(Edge(mo,f));
		if(a[qi][mo]==0)e[mo].push_back(Edge(qi,f));
	}
	memset(d,0x3f3f3f3f,sizeof(d));
	dijkstra();
	if(vis[t]&&wen[t]!=wen[s])cout<<d[t];
	else cout<<"-1";
	return 0;
}

标签:Node,int,mo,read,&&,P1078,qi
From: https://www.cnblogs.com/zan-mei-tai-yang/p/18492254

相关文章

  • P1078
    然而题单里就是有这题……dij,照亮世界!#include<bits/stdc++.h>usingnamespacestd;intn,k,m,s,t,a[105][105],wen[105];intd[100005];boolvis[100005];intqi,mo,f;inlineintread(){intx=0;charch=getchar();while(ch>='0'&&ch<='9......
  • P10786 [NOI2024] 百万富翁
    思路:先考虑Sub1的部分分,暴力算法:暴力询问所有\(i<j\)的数对\((i,j)\)。则一个\(i\)为最大值当且仅当\((i,j)\)的返回值都是\(i\)且在\(i\)之前没有满足此条件的位置。则设\(\operatorname{F}(n)=\frac{n(n-1)}{2}\)表示暴力找出\(n\)个数中的最大值需要......
  • P10789 [NOI2024] 登山
    思路:我们可以对于每个\(i\)找到它能跳到的最远的点和最近的点,倍增求一下\(k\)级祖先即可,令\([l_i,r_i]\)新表示\(i\)能跳到其祖先中深度在\([l_i,r_i]\)内的点;同时令\(lim_i=d_i-h_i-1\)表示\(i\)至少要跳到\(lim_i\)的深度。考虑动态规划算法,令\(dp_i\)......
  • P10785 [NOI2024] 集合
    思路:容易发现,区间\([l,r]\)中\(A\)与\(B\)等价的充分必要条为:两个序列中所有元素对于在区间\([l,r]\)内的出现集合组成的集合相等。这样才可以使得存在一种对应的映射方案使得等价。考虑哈希判定。设\(S_i\)表示\(i\)出现的位置的集合,则设\(\operatorname......
  • 题解:P10781 【MX-J1-T1】『FLA - III』Spectral
    P10781【MX-J1-T1】『FLA-III』Spectral题解(非正解,正解应该是数学题。)这道题很简单,分析题意就可以得出核心代码:for(inti=1;i<=n;i++){ans=k+ans/i;}那么恭喜你获得$40$pts。为什么呢?因为题目需要的是最高温度,而烧碳获得的温度可能小于烧炭时减低的温度。简单说......
  • 题解:P10781 【MX-J1-T1】『FLA - III』Spectral
    本题的主要思路就是数学。首先,让我们先来打一个表。\(i\)\(1\)\(2\)\(3\)\(4\)\(\dots\)\(T_{i}\)\(k\)\(1.5k\)\(1.5k\)\(1.375k\)\(\dots\)易用肉眼看见,自\(T_{3}\)之后数越来越小,于是我们大胆猜测,若\(n\ne1\),则它的最大值是\(1.5k\)否则\(k\)。......
  • CSP历年复赛题-P1078 [NOIP2012 普及组] 文化之旅
    原题链接:https://www.luogu.com.cn/problem/P1078题意解读:1~n个国家,每个国家有自己的文化,不同国家文化可以相同,要从起点遍历到终点,已经学习过的文化不能重复学习,已经学习过的文化被某个文化歧视的国家也不能遍历,且不同国家之间有边,边有不同的距离,计算从起点到终点的最短路径。解......
  • P1078 [NOIP2012 普及组] 文化之旅
    https://www.luogu.com.cn/problem/P1078搜索,图论,剪枝,最短路绿色题思路一:搜索1.输入,建边,用一个数组存储已经学习的文化,2.搜索,以当前的点now去看能走到哪些边,......