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]<<' ';
}