【题解】240928ABC373

T1:模拟

void solve() {
	int cnt = 0;
	for(int i=0;i<12;i++){
		cin >> q[i];
		if(q[i].size()==i+1){
			cnt ++;
		}
	}	
	cout << cnt << endl;
}

T2:也是模拟 注意每次从1开始

void solve() {
	string S;
	cin >> S; 
	int now = S.find('A') + 1; 
	int ans = 0;
	
	for (char ch = 'A'; ch <= 'Z'; ++ch) {
		int temp = S.find(ch) + 1; 
		ans += abs(temp - now);
		now = temp;
	}
	
	cout << ans << endl; 
}

T3:遍历找max即可

void solve() {
	int N;
	cin >> N;
	vector<int> A(N), B(N);
	for (int i = 0; i < N; ++i) {
		cin >> A[i];
	}
	for (int i = 0; i < N; ++i) {
		cin >> B[i];
	}
	int maxA = *max_element(A.begin(), A.end());
	int maxB = *max_element(B.begin(), B.end());
	cout << maxA + maxB << endl;
	return 0;
}

T4:对于图中每个相连的组件,写入顶点 1 的值后,就确定了该组件中所有顶点的值。这是因为确定一个顶点的值,就会确定通过边与之相连的顶点的值。因此可以依次查看顶点,将尚未确定值的顶点的值固定为0,然后重复确定链中与该顶点相连的所有顶点的值

const int N=1e6+5;
int n,m;
int head[N],nx[N],to[N],w[N],tot;
void add(int x,int y,int z){
	to[++tot]=y,nx[tot]=head[x],head[x]=tot,w[tot]=z;
}
long long ans[N];
bool vis[N];
void dfs(int x){
	vis[x]=1;
	for(int i=head[x],y;i;i=nx[i])
		if(!vis[y=to[i]]){
		ans[y]=ans[x]+w[i],dfs(y);
	}
}
int main(){
	cin>>n>>m;
	while(m--){
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,z),add(y,x,-z);
	}
	for(int i=1;i<=n;++i)
		if(!vis[i])dfs(i);
	for(int i=1;i<=n;++i)cout<<ans[i]<<' ';
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值