首页 > 其他分享 >黑暗城堡

黑暗城堡

时间:2024-03-10 21:55:23浏览次数:16  
标签:dist greater 黑暗 vis 城堡 ll 这题 dp

acwing链接

原本以为是给我所有点到1号点的距离,然后问我有多少棵树满足这个要求。
(一个明显是dp的dp吧)

其实差不多,但是它已经把所有能选的边给你了。
差别就是我枚举的时候多了一个要求。

所以这题就是先跑一遍单源最短路,然后把所有点按照dist排序。
以为没有负边,所以dist大的点一定是连在dist严格小与它的点上的。
而我们要找的方案数其实就是每个点x满足\(dist[x]+a[x][u]= dist[u]\)的种类数的乘积。
还是很好写也很好理解的。

#include<bits/stdc++.h>
#define ll long long
using namespace std;
inline ll read() {
	char c=getchar();ll a=0,b=1;
	for(;c<'0'||c>'9';c=getchar())if(c=='-')b=-1;
	for(;c>='0'&&c<='9';c=getchar())a=a*10+c-48;return a*b;
}
ll n,m,head[2000001],dist[1001],tot,vis[1001],d[1001],p[1001],a[1001][1001];
struct edge
{
	ll next,to,v;
}e[2000001];
const ll Mod=(1LL<<31)-1;
inline void add(ll i,ll j,ll v)
{
	e[++tot].next=head[i];
	e[tot].to=j;
	e[tot].v=v;
	head[i]=tot;
}
void dijkstra()
{
	priority_queue<pair<ll,ll>, vector<pair<ll,ll> >,greater<pair<ll,ll> > > q;
	q.push({0,1});
	memset(dist,0x3f,sizeof(dist));
	dist[1]=0;
	while(!q.empty())
	{
		ll x=q.top().second;
		q.pop();
		if(vis[x]==1)continue;
		vis[x]=1;
		for(ll i=head[x];i!=0;i=e[i].next)
		{
			ll u=e[i].to;
			if(dist[x]+e[i].v<dist[u])
			{
				dist[u]=dist[x]+e[i].v;
				q.push({dist[u],u});
			}
		}
	}
}
bool cmp(ll a,ll b)
{
	return dist[a]<dist[b];
}
int main()
{
	n=read(),m=read();
	for(ll i=1;i<=m;i++)
	{
		ll x=read(),y=read(),z=read();
		add(x,y,z);add(y,x,z);
		a[x][y]=a[y][x]=z;
	}
	for(ll i=1;i<=n;i++)p[i]=i;
	dijkstra();
	sort(p+1,p+1+n,cmp);
	memset(vis,0,sizeof(vis));
	memset(d,0x3f,sizeof(d));
	d[1]=0;
	ll ans=1;vis[1]=1;
	for(ll i=2;i<=n;i++)
	{
		ll now=p[i];
		ll cnt=0;
		for(ll j=1;j<=n;j++)
		{
			if(vis[j]&&a[p[i]][j]!=0&&a[p[i]][j]+dist[j]==dist[p[i]])cnt++;
		}
		vis[p[i]]=1;
		ans=ans*cnt%Mod;
	}
	cout<<ans<<endl;
	return 0;
}

我调了很久。
因为我tm把大根堆当小根堆用。
我明明上次记过了啊,greater就是大的在上面,跟是最上面的。每次取出来的是跟!

我服了我自己了。
这题的思路。。好像对于我来说没什么要学的了。
只要注意到什么情况下能够产生其他的方案数,这题就做出来了。
其实没啥难点

标签:dist,greater,黑暗,vis,城堡,ll,这题,dp
From: https://www.cnblogs.com/HLZZPawa/p/18064955

相关文章

  • 《黑暗欺骗》c++控制台 2D 版!Alpha 0.2.1
    现在只打了设置这些个东西,游戏主体还没打,那才是难点已实现功能游戏未实现设置有音量设置和键盘设置两个功能存档(这好像是最简单的功能吧?)注意事项!!!没错,如你所见,这个游戏我是使用了MCI来播放声音的!因此,你的DEV-C++需要链接到一个库打开工具->编译选项->编译器-......
  • P3202 [HNOI2009] 通往城堡之路
    考虑将每个支撑点都先设成其下限高度,即\(h_i\getsh_1-(i-1)\timesd\),这样就只会提高某些支撑点的高度。显然每次提高的是一个后缀。提高某个后缀的贡献是当前高度低于原先高度的支撑点数量减去当前高度不低于原先高度的支撑点数量。选择贡献最大的后缀直到最后一个支撑点的高......
  • 题解:[SCOI2008] 城堡
    应该是联赛前最后一次任性了,浪费的时间有点多,不过也揭露了我的基础知识和代码能力都很弱的问题,得加油啊。先stodwt。给定一棵基环树森林,起初有\(m\)个点已被选进\(S\)里,你需要再选\(k\)个点加入到\(S\)中,最小化其余点到\(S\)距离的最大值。这个问题直接做非常困难,......
  • P1457 [USACO2.1] 城堡 The Castle 题解
    分析感觉没有蓝题难度一道bfs题目,相较于大部分bfs题,它较为复杂,但分析一下还是很好水过的。建立墙时,可以用三维数组,\(wall_{~i,~j,~pos}\)表示第\(i\)行第\(j\)列\(pos\)方向有墙。观察发现,\(8=2^3,4=2^2,2=2^1,1=2^1\),于是可以用位运算快速储存。这里给出......
  • 题解 hdu 1269 迷宫城堡
    找点图论练习题写,发现hdu又寄了,那就发到blog里吧。思路:tarjan缩点判断DAG中点数是否为1。若是,则该图为强连通图。 //producedbymiya555//stupidmistakes:多测记得清空//ideas:tarjan模板#include<bits/stdc++.h>usingnamespacestd;constintN=10010;intn,m,low[......
  • 【2023.09.17】拥抱自己的黑暗面
    主动说出自己不好的一面,是否是一件坏事呢?我思考这个问题最近有在尝试和别人说出自己不好的一面,我在寻找自己的缺点在哥们看来这再正常不过了,甚至觉得我太过坦诚但是在异性眼里看来,这样子的交流,是不好的或许在与异性交往的时候,大家只要戴上面具,只要展示出自己最好的一面就足够......
  • P4967 黑暗打击
    题目链接:P4967黑暗打击题意对于\(n\)阶的\(\mathsf{Hilbert}\)曲线,从上往下灌水,能淹没几个单位面积?这是\(1\sim4\)阶的\(\mathsf{Hilbert}\)曲线:\(h_1\),如最左图所示,是一个缺上口的正方形,这个正方形的边长为\(1\)。从\(h_2\)开始,按照以下方法构造曲线\(h_i\):......
  • ENVI实现QUAC、简化黑暗像元、FLAASH方法的遥感影像大气校正
    本文介绍基于ENVI软件,实现对Landsat7遥感影像加以预处理与多种不同大气校正方法的操作。目录1数据导入与辐射定标2波段合成3编辑头文件4转换文件格式5QUAC快速大气校正6简化黑暗像元法大气校正7FLAASH大气校正8大气校正结果与其他处理对比分析8.1三种大气校正方法结果......
  • Chrome 护眼模式 - 黑暗模式 - 夜眼(Night Eye) 插件
    Chrome地址栏里输入:chrome://extensions/打开插件商城:......
  • 计算机技术人性黑暗面和光明面
    黑暗面1.利用技术作e。我工作身边有很多这样的人,比如维护人员在的时间服务器好好的,他一走立马就出事。2.照搬和抄袭。比如明明是别人的东西说成是自己的。像华微和疼迅是业内代表。3.不共享。比如你问他技术,不但不说还把你羞辱一番。态度十分傲慢,对人冷漠。 光明面1.开源免......