信使

Problem Description
战争时期,前线有n个哨所,每个哨所可能会与其他若干个哨所之间有通信联系。信使负责在哨所之间传递信息,当然,这是要花费一定时间的(以天为单位)。指挥部设在第一个哨所。当指挥部下达一个命令后,指挥部就派出若干个信使向与指挥部相连的哨所送信。当一个哨所接到信后,这个哨所内的信使们也以同样的方式向其他哨所送信。直至所有n个哨所全部接到命令后,送信才算成功。因为准备充足,每个哨所内都安排了足够的信使(如果一个哨所与其他k个哨所有通信联系的话,这个哨所内至少会配备k个信使)。现在总指挥请你编一个程序,计算出完成整个送信过程最短需要多少时间。
Input
有多组输入数据,每组数据的第一行有两个整数n和m,分别表示有n个哨所和m条通信线路。(1<=n<=100)。
第2至m+1行:每行三个整数i、j、k,表示第i个和第j个哨所之间存在通信线路,且这条线路要花费k天。
Output
对于每组输入,输出一个整数,表示完成整个送信过程的最短时间。如果不是所有的哨所都能收到信,就输出-1。
Sample Input
4 4
1 2 4
2 3 7
2 4 1
3 4 6
Sample Output

11

#include<stdio.h>
#include<string.h>
#define INF 0x7ffffff
int arm[103],map[1003][1003],n,m,p,q;
#define MAx 1003
int ev[MAx*2],last[MAx*2],nbs[MAx];
void dijkstra(int x)
{
	int dis[1003],vis[1003],i,j,minn,flag;
	memset(dis,0,sizeof(dis));
	memset(vis,0,sizeof(vis));
	for(i=1;i<=m;i++)
		dis[i]=map[x][i];
	dis[x]=0,vis[x]=1;
	for(i=1;i<m;i++)
	{
		minn=INF;
		for(j=1;j<=m;j++)
			if(!vis[j]&&dis[j]<minn)
			{
				flag=j;
				minn=dis[j];
			}
			vis[flag]=1;
			vis[flag]=1;
			for(j=nbs[flag];j;j=last[j])
				if(vis[ev[j]]==0&&map[flag][ev[j]]<INF&&dis[flag]+map[flag][ev[j]]<dis[ev[j]])
					dis[ev[j]]=dis[flag]+map[flag][ev[j]];
			/*for(j=1;j<=ljb[flag][0];j++)
				if(vis[ljb[flag][j]]==0&&map[flag][ljb[flag][j]]<INF&&dis[flag]+map[flag][ljb[flag][j]]<dis[ljb[flag][j]])
					dis[ljb[flag][j]]=dis[flag]+map[flag][ljb[flag][j]];*/
	}
	int Max=-1;
		for(i=1;i<=n;i++)
			if(Max<dis[i])
				Max=dis[i];
			if(Max==INF)
				printf("-1\n");
			else printf("%d\n",Max);
}
int main()
{
	//freopen("b.txt","r",stdin);
	int i,j,a,b,c,t;
	while(scanf("%d %d",&n,&m)==2)
	{
		
		memset(nbs,0,sizeof(nbs));
		memset(ev,0,sizeof(ev));
		memset(last,0,sizeof(last));
		t=0;
		memset(ljb,0,sizeof(ljb));
		for(i=1;i<=m;i++)
			for(j=1;j<=m;j++)
				map[i][j]=INF;
		for(i=1;i<=m;i++)
		{
			scanf("%d %d %d",&a,&b,&c);
			map[b][a]=map[a][b]=c;
			 last[++t]=nbs[a]; nbs[a]=t; ev[t]=b; 
            last[++t]=nbs[b]; nbs[b]=t; ev[t]=a;
			//ljb[a][++ljb[a][0]]=b;
			//ljb[b][++ljb[b][0]]=a;
		}
			dijkstra(1);
	}
	return 0;
}


### 蚂蚁信使 IT 服务与消息传递 蚂蚁信使(Ant Messenger)在 IT 领域中可以被理解为一种高效的消息传递解决方案,类似于 Kafka 和 Webhook 的功能扩展[^1]。它专注于解决企业级信息传递中的复杂问题,确保数据能够在分布式系统中高效流转。以下是关于蚂蚁信使在 IT 服务和消息传递中的核心特点和应用场景: #### 核心特点 蚂蚁信使通过构建一个可靠的消息中间件平台,提供以下关键功能: - **高吞吐量**:支持大规模数据的实时传输,满足企业级应用的需求。 - **低延迟**:确保消息传递的及时性,类似于 Webhook 的工作机制[^2],能够在事件触发时立即发送数据。 - **可扩展性**:支持动态扩展,适应不同业务场景下的负载变化。 #### 技术实现 蚂蚁信使的技术架构通常包括以下几个方面: 1. **消息队列**:采用类似 Kafka 的分布式消息队列技术,确保消息的可靠传递和顺序性[^1]。 2. **事件驱动架构**:通过监听事件并触发相应的消息传递流程,类似于 Webhook 的机制[^2]。 3. **多协议支持**:支持多种通信协议(如 HTTP、MQTT 等),以适配不同的客户端和服务端需求。 #### 应用场景 蚂蚁信使适用于以下典型场景: - **实时通知系统**:例如订单状态更新、支付成功提醒等。 - **微服务通信**:在分布式系统中,作为服务间通信的桥梁。 - **数据集成**:用于不同系统之间的数据同步和整合。 ```python # 示例代码:模拟蚂蚁信使的消息发送功能 import requests def send_message(url, data): try: response = requests.post(url, json=data) if response.status_code == 200: print("消息发送成功") else: print("消息发送失败") except Exception as e: print(f"发生错误: {e}") # 使用示例 send_message("https://example.com/webhook", {"event": "order_created", "data": {"id": 123}}) ``` ### 注意事项 在使用蚂蚁信使时,需要注意以下几点: - **安全性**:确保消息传递过程中的数据加密和身份验证。 - **可靠性**:配置重试机制和死信队列,以应对网络波动或服务不可用的情况。 - **监控与告警**:实时监控消息传递的状态,并设置合理的告警规则。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值