/* Bismillahir Rahmanir Rahim
Solution-Using BFS
*/
#include<bits/stdc++.h>
#define fi(n, m) for(int i=n; i<=m; i++)
#define fd(n, m) for(int i=n; i>=m; i--)
#define inf 100009
using namespace std;
vector<int>vt[105], cost[105];
int dis[105], zz;
void bfs(int st){
queue<int>q;
q.push(st);
dis[st]=0;
int p, sz, temp, xx;
while(!q.empty()){
p=q.front();
q.pop();
sz=vt[p].size();
fi(0, sz-1){
xx=vt[p][i];
temp=max(dis[p], cost[p][i]);
if(temp<dis[xx]){
dis[xx]=temp;
q.push(xx);
}
}
}
}
int main(){
int t, cs=1, n, m, u, v, w, tt, q, ans;
while(1){
cin>>n>>m>>q;
if(n==0&&m==0&&q==0)break;
if(cs!=1)cout<<endl;
fi(0, m-1){
cin>>u>>v>>w;
vt[u].push_back(v);
vt[v].push_back(u);
cost[u].push_back(w);
cost[v].push_back(w);
}
cout<<"Case #"<<cs++<<endl;
while(q--){
fi(1, n) dis[i]=inf;
cin>>tt>>zz;
bfs(tt);
if(dis[zz]==inf)cout<<"no path"<<endl;
else cout<<dis[zz]<<endl;
}
fi(0, n){
vt[i].clear();
cost[i].clear();
}
}
return 0;
}
|
Showing posts with label UVa. Show all posts
Showing posts with label UVa. Show all posts
Friday, March 10, 2017
Solution of UVa 10048 Audiophobia
Wednesday, March 1, 2017
Solution of UVa 821 Page Hopping
/* Bismillahir Rahmanir Rahim
Solution-Using "Floyd Warshall"
*/
#include<bits/stdc++.h>
#define fi(n, m) for(int i=n; i<=m; i++)
#define fd(n, m) for(int i=n; i>=m; i--)
#define ll long long
using namespace std;
set<ll>st;
ll dis[101][101];
int main(){
ll n, e, u, v, w, cs=1, mx, sum, sz;
float ans;
while(1){
mx=0, sum=0;
for(ll i=1; i<=100; i++){
for(ll j=1; j<=100; j++){
if(i==j)dis[i][j]=0;
else dis[i][j]=1000000009;
}
}
cin>>u>>v;
if(u==0&&v==0) break;
else{
st.insert(u);
st.insert(v);
mx=max(mx, max(u, v));
dis[u][v]=1;
while(1){
cin>>u>>v;
if(u==0&&v==0) break;
else{
st.insert(u);
st.insert(v);
mx=max(mx, max(u, v));
dis[u][v]=1;
}
}
}
for(ll k=1; k<=mx; k++){
for(ll i=1; i<=mx; i++){
for(ll j=1; j<=mx; j++){
dis[i][j]=min(dis[i][j], (dis[i][k]+dis[k][j]));
}
}
}
for(ll i=1; i<=mx; i++){
for(ll j=1; j<=mx; j++){
if(dis[i][j]!=1000000009) sum=sum+dis[i][j];
}
}
sz=st.size();
sz=sz*(sz-1);
ans=(double)sum/sz;
cout<<"Case "<<cs++<<": average length between pages = ";
printf("%.3f clicks\n", ans);
st.clear();
}
return 0;
}
|
Solution of UVa 11015 - 05-2 Rendezvous
/* Bismillahir Rahmanir Rahim
Solution-Using "Floyd Warshall"
*/
#include<bits/stdc++.h>
#define fi(n, m) for(int i=n; i<=m; i++)
#define fd(n, m) for(int i=n; i>=m; i--)
using namespace std;
int main(){
int cs=1, n, u, v, w, m;
string s;
while(1){
int i, j, k, dis[25][25], ans, sum, mn=1000000009;
map<int, string>mp;
cin>>n>>m;
if(n==0) break;
fi(1, n){
cin>>s;
mp[i]=s;
}
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
if(i==j)dis[i][j]=0;
else dis[i][j]=1000000009;
}
}
fi(0, m-1){
cin>>u>>v>>w;
dis[u][v]=dis[v][u]=w;
}
for(k=1; k<=n; k++){
for(i=1; i<=n; i++){
for(j=1; j<=n; j++){
dis[i][j]=min(dis[i][j], (dis[i][k]+dis[k][j]));
}
}
}
for(i=1; i<=n; i++){
sum=0;
for(j=1; j<=n; j++){
sum=sum+dis[i][j];
}
if(mn>sum){
mn=sum; ans=i;
}
}
cout<<"Case #"<<cs++<<" : "<<mp[ans]<<endl;
}
return 0;
}
|
Tuesday, February 28, 2017
Solution of 10246 Asterix and Obelix
"All pair shortest path" বের করার সময় শুধুমাত্র path এর cost দেওয়া থাকে আর তার উপর ভিত্তি করে ans বের করতে হয়। কিন্তু এখানে শুধু path এর cost না, সাথে সেই path এর maximum node cost নিবে । অর্থাৎ two dimensional purpose। এই ক্ষেত্রে দুইবার Floyd Warshall প্রয়োগ করতে হবে।
/* Bismillahir Rahmanir Rahim
Just apply "Floyd Warshall" algorithm two times
*/
#include<bits/stdc++.h>
#define fi(n, m) for(int i=n; i<=m; i++)
#define fd(n, m) for(int i=n; i>=ml i--)
#define inf 100000000
using namespace std;
int main(){
int cs=1, n, m, r, u, v, w, q, tcost;
while(1){
int total, x, dis[90][90], c[90][90];
cin>>n>>m>>q;
if(n==0&&m==0&&q==0) break;
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
if(i==j) dis[i][j]=0;
else dis[i][j]=inf;
c[i][j]=inf;
}
}
fi(1, n){
cin>>x;
c[i][i]=x;
}
fi(1, m){
cin>>u>>v>>w;
dis[u][v]=w;
dis[v][u]=w;
c[u][v]=c[v][u]=max(c[u][u], c[v][v]);
}
for(int k=1; k<=n; k++){
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
total=dis[i][k]+dis[k][j];
tcost=max(c[i][k], c[k][j]);
if(dis[i][j]+c[i][j]>total+tcost){
dis[i][j]=total;
c[i][j]=tcost;
}
}
}
}
for(int k=1; k<=n; k++){
for(int i=1; i<=n; i++){
for(int j=1; j<=n; j++){
total=dis[i][k]+dis[k][j];
tcost=max(c[i][k], c[k][j]);
if(dis[i][j]+c[i][j]>total+tcost){
dis[i][j]=total;
c[i][j]=tcost;
}
}
}
}
if(cs!=1)cout<<endl;
cout<<"Case #"<<cs++<<endl;
fi(1, q){
cin>>u>>v;
if(dis[u][v]>=inf) cout<<-1<<endl;
else cout<<dis[u][v]+c[u][v]<<endl;
}
}
return 0;
}
|
Thursday, January 19, 2017
Solution of UVa-11029 Leading and Trailing
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n, k, t_case;
ll bigmod(ll b, ll p, ll m){
if(p==0)return 1;
ll xx=bigmod(b, p/2, 1000); xx=(xx*xx)%1000;
if(p%2==1)xx=(xx*b)%1000;
return xx;
}
int main(){
cin>>t_case;
while(t_case){
cin>>n>>k;
/* executing first 3 digits */
double x=k*(log10(n));
x=x-(int)x; // taking fraction value only
double ans=pow(10, x);
ans=ans*100;
cout<<(int)ans<<"...";
/* executing last 3 digits */
printf("%03d\n", bigmod(n, k, 1000));
t_case--;
}
return 0;
}
Monday, October 31, 2016
Solution of UVa 11488-Hyper Prefix Sets
See the problem UVa-11488
>>>This problem has been solved using "Trie". So if you don't known with "Trie", you should not try to understand this solution.<<<
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll cur, last, ss, sss, ans, mx;
string s;
struct node{
int next[2];
long long cnt;
}ar[10000009];
void new_trie(int cur){
ar[cur].next[0]=-1;
ar[cur].next[1]=-1;
ar[cur].cnt=1;
}
int insrt(){
ss=s.size(), cur=0;
for(int k=0; k<ss; k++){
int x=(int)s[k]-48;
if(ar[cur].next[x]==-1){
ar[cur].next[x]=last;
new_trie(last++);
cur=ar[cur].next[x];
}
else{
cur=ar[cur].next[x];
ar[cur].cnt++;
mx=(k+1)*ar[cur].cnt;
ans=max(mx, ans);
}
}
sss=max(ss, sss);
}
int main(){
long long t, n;
cin>>t;
while(t--){
ans=0, mx=0, last=1, sss=0;
new_trie(0);
cin>>n;
while(n--){
cin>>s;
insrt();
}
cout<<max(ans, sss)<<endl;
}
return 0;
}
Solution of UVa 11362-Phone List
See the problem UVa-11362
#include<bits/stdc++.h>
using namespace std;
long long n, t, i, last=1, cur, k, x, fl;
string s;
struct node{
bool endmark;
int next[11];
}r[100009];
void new_trie(int cur){
for(int zz=0; zz<10; zz++){
r[cur].next[zz]=-1;
}
r[cur].endmark=false;
}
void insrt(){
cur=0, k=s.size();
for(int z=0; z<k; z++){
x=(int)s[z]-48;
if(r[cur].next[x]==-1){
r[cur].next[x]=last;
new_trie(last++);
cur=r[cur].next[x];
}
else{
cur=r[cur].next[x];
if(r[cur].endmark==true)fl=1;
if(z==k-1) fl=1;
}
if(fl==1) break;
}
r[cur].endmark=true;
}
int main(){
cin>>t;
while(t--){
cin>>n;
fl=0, last=1;
new_trie(0);
for(i=0; i<n; i++){
cin>>s;
insrt();
}
if(fl==1) cout<<"NO"<<endl;
else cout<<"YES"<<endl;
}
return 0;
}
|
Subscribe to:
Posts (Atom)
-
#include<bits/stdc++.h> #define ll long long using namespace std ; ll n , k , t_case ; ll bigmod ( ll b , ll p , ll m...
-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37...
-
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 ...