শনিবার, ২৯ জুলাই, ২০১৭

UVA 10000 - Longest Paths

#include<bits/stdc++.h>
using namespace std;
map<int,vector<int> >rana;
long a,c,stt,ln,i;
long dis[101];
void bfs()
{
    queue<pair<int,int> >q;
    pair<int,int>p;
    q.push(make_pair(c,0));
    while(!q.empty())
    {
        p=q.front();
        q.pop();
        if(p.second>dis[p.first])
        {
            dis[p.first]=p.second;
            if(p.second>ln)
            {
                ln=p.second;
                stt=p.first;
            }
            else if(p.second==ln&&p.first<stt)
                stt=p.first;
            for(i=0; i<rana[p.first].size(); i++)
            {
                q.push(make_pair(rana[p.first][i],p.second+1));
            }
        }
    }
}
int main()
{
    ios_base::sync_with_stdio(false);
    long b=0;
    while(cin>>a&&a)
    {
        rana.clear();
        cin>>c;
        long d,e;
        while(cin>>d>>e)
        {
            if(d==0&&e==0)
                break;
            rana[d].push_back(e);
        }
        memset(dis,-1,sizeof(dis));
        stt=c;
        ln=0;
        bfs();
        cout<<"Case "<<++b<<": The longest path from "<<c<<" has length "<<ln<<", finishing at "<<stt<<"."<<endl<<endl;
    }
    return 0;
}

শুক্রবার, ২৮ জুলাই, ২০১৭

UVA 11631 - Dark roads

#include<bits/stdc++.h>
#define fr(i1,m) for(int i1=0;i1<m;i1++)
#define max 20000
using namespace std;
struct pq
{
    int node,cost;
    bool operator<(const pq &b)const
    {
        return cost>b.cost;
    }
};
int prims(vector<pq>mst[],int source,int node)
{
    priority_queue<pq>p;
    long taken[max]={0},sum,i,j,s;
    pq u,v;
    v.node=source;
    s=v.cost=0;
    p.push(v);
    while(!p.empty())
    {
        u=p.top();
        if(taken[u.node]==0)
        s+=u.cost;
        taken[u.node]=1;
        p.pop();
        for(i=0;i<mst[u.node].size();i++)
        {
            if(taken[mst[u.node][i].node]==0)
            {
                v.node=mst[u.node][i].node;
                v.cost=mst[u.node][i].cost;
                p.push(v);
            }
        }

    }
    return s;

}
int main()
{
    int nodes,edge,i,j,x,y,z,val;
    vector<pq>mst[max];
    pq v;
    while(scanf("%d%d",&nodes,&edge)==2)
    {
        if(nodes==0&&edge==0)break;
        long t=0;
        for(i=0;i<max;i++)
        mst[i].clear();
        for(i=0;i<edge;i++)
        {
            cin>>x>>y>>z;
            v.cost=z;
            v.node=y;
            mst[x].push_back(v);
            v.node=x;
            mst[y].push_back(v);
            t=t+z;

        }
        val=prims(mst,0,nodes);
        cout<<t-val<<endl;
    }
}

বৃহস্পতিবার, ২৭ জুলাই, ২০১৭

UVA 11463 - Commandos

#include <bits/stdc++.h>
using namespace std;
long i,j,k,ar[105][105]={0};
void floyd_warshall()
{
    for(k=0;k<100;k++)
    {
        for(i=0;i<100;i++)
        {
            for(j=0;j<100;j++)
            {
                ar[i][j]=min(ar[i][j],ar[i][k]+ar[k][j]);
            }
        }
    }
}
main()
{
    long ts,cs=1;
    cin>>ts;
    while(ts--)
    {
        long node,edge,a,b,rs=0,source,desti;
        cin>>node>>edge;
        for(i=0;i<100;i++)
        {
            for(j=0;j<100;j++)
            {
                if(i==j)
                {
                    ar[i][j]=0;
                }
                else
                    ar[i][j]=1000000000;
            }
        }
        for(i=0;i<edge;i++)
        {
            cin>>a>>b;
            ar[a][b]=1;
            ar[b][a]=1;
        }
        floyd_warshall();
        cin>>source>>desti;
        for(i=0;i<node;i++)
        {
            if(((ar[i][source]+ar[i][desti])>rs)&&(ar[i][source]!=1000000000)&&(ar[i][desti]!=1000000000))
                rs=ar[i][source]+ar[i][desti];
        }
        printf("Case %ld: %ld\n",cs++,rs);
    }
}

সোমবার, ২৪ জুলাই, ২০১৭

UVA 12897 - Decoding Baby Boos

#include <bits/stdc++.h>
using namespace std;
main()
{
    long ts;
    scanf("%ld",&ts);
    while(ts--)
    {
        string s;
        cin>>s;
        long i,n,ar[100]= {0},k,j;
        char ch,ch1;
        scanf("%ld",&n);
        for(i=65;i<=90;i++)
        {
            ar[i]=i;
        }
        for(i=1; i<=n; i++)
        {
            cin>>ch>>ch1;
            for(j=65;j<=90;j++)
            {
                if(ar[j]==ch1)
                {
                    ar[j]=ch;
                }
            }
        }
        for(i=0; i<s.size(); i++)
        {
            if(s[i]>=65&&s[i]<=90)
                printf("%c",ar[s[i]]);
            else
                printf("%c",s[i]);
        }
        printf("\n");
    }
}

শনিবার, ২২ জুলাই, ২০১৭

Strongly connencted component code in c++

Nice tutorial :- tushar roy 
Link:- https://www.youtube.com/watch?v=RpgcYiky7uw&t=849s
1 no:- uva 247 no problem code (by mine)
#include<bits/stdc++.h>
#define mx 105
using namespace std;
vector<int>vec[mx],ultavec[mx];
vector<string>allnames;
vector<int>dhokalam;
map<string,int>mp;
int vis[mx],ar[mx],newline=0,cs=1,n,m;
void dfs(int u)
{
    vis[u]=1;
    int v,j;
    for(j=0;j<vec[u].size();j++)
    {
        v=vec[u][j];
        if(vis[v]==0)
        {
            dfs(v);
        }
    }
    dhokalam.push_back(u);
}
void dfs2(int u,int c)
{
    vis[u]=0;
    int v,j;
    ar[u]=c;
    for(j=0;j<ultavec[u].size();j++)
    {
        v=ultavec[u][j];
        if(vis[v]==1)
        {
            dfs2(v,c);
        }
    }
}
void print(int len)
{
    if(newline!=0)
        printf("\n");
    newline=1;
    int i1,j;
    int spc=0;
    printf("Calling circles for data set %d:\n",cs++);
    for(i1=1;i1<=len;i1++)
    {
        spc=0;
        for(j=1;j<=n;j++)
        {
            if(ar[j]==i1)
            {
                if(spc==1)
                {
                    printf(", ");
                }
                spc=1;
                cout<<allnames[j-1];
            }
        }
        printf("\n");
    }
}
main()
{
    while(cin>>n>>m)
    {
        if ( n == 0 && m == 0 ) break;
        int i,cnt=1;;
        for(i=0;i<=mx;i++)
        {
            vec[i].clear();
            ultavec[i].clear();
        }
        allnames.clear();
        mp.clear();
        newline=0;
        string s,s1;
        for(i=1;i<=m;i++)
        {
            cin>>s>>s1;
            if(mp[s]==0)
            {
                mp[s]=cnt++;
                allnames.push_back(s);
            }
            if(mp[s1]==0)
            {
                mp[s1]=cnt++;
                allnames.push_back(s1);
            }
            vec[mp[s]].push_back(mp[s1]);
            ultavec[mp[s1]].push_back(mp[s]);
        }
        for(i=1;i<cnt;i++)
        {
            if(vis[i]==0)
            {
                dfs(i);
            }
        }
        int k=dhokalam.size()-1;
        cnt=0;
        for(i=k;i>=0;i--)
        {
            if(vis[dhokalam[i]]==1)
            {
                dfs2(dhokalam[i],++cnt);
            }
        }
        print(cnt);
    }
}

2 no: uva 247 no problem code (from internet)
#include<bits/stdc++.h>
#include<bits/stdc++.h>
#define N 100
using namespace std;
map<string, int> names;
vector<string> rNames;

vector <int> edges [N];
vector <int> rEdges [N];    // reversed edges
vector <int> sortedNode;
bool vis [N];
int comp [N];               // component number of a node
int cases = 0;
bool blank = false;
int n, m;
void reset ()
{
    int i;
    for (i = 0; i < N; i++ )
    {
        edges [i].clear();
        rEdges [i].clear();
    }
    sortedNode.clear();
    names.clear();
    rNames.clear();
    memset (vis, false, sizeof vis);
}
void dfs1 (int x)
{
    vis [x] = true;
    int u;
    for (u = 0; u < edges [x].size(); u++ )
    {
        if (vis[edges[x][u]]==0)
            dfs1(edges [x] [u]);
    }
    sortedNode.push_back(x);
}
void dfs2 (int x, int c)
{
    vis [x] = false;
    comp [x] = c;
    int u;
    for (u = 0; u < rEdges [x].size(); u++ )
    {
        if (vis[rEdges [x][u]])
            dfs2(rEdges [x] [u], c);
    }
}
void printOutput(int compLen)
{
    if (blank) printf ("\n");
    blank = true;
    printf ("Calling circles for data set %d:\n", ++cases);
    bool space;
    int i,j;
    for (i = 1; i <= compLen; i++ )
    {
        space = false;
        for (j=0;j<n;j++)
        {
            if (comp [j + 1] == i)
            {
                if (space) printf (", ");
                space = true;
                cout << rNames[j];
            }
        }
        printf ("\n");
    }
}
int main ()
{
    while (scanf ("%d %d", &n, &m))
    {
        if ( n == 0 && m == 0 ) break;
        reset();
        int i,namesLen=0;
        string name1, name2;
        for(i=0;i<m;i++)
        {
            cin >> name1 >> name2;
            if (names [name1]==0)
            {
                ++namesLen;
                names [name1] = namesLen;
                rNames.push_back(name1);
            }
            if (names [name2]==0)
            {
                ++namesLen;
                names [name2] = namesLen;
                rNames.push_back(name2);
            }
            edges [names [name1]].push_back(names [name2]);
            rEdges [names [name2]].push_back(names [name1]);
        }
        for(i=0;i<namesLen;i++)
        {
            if (!vis [i + 1])
            {
                dfs1(i + 1);
            }
        }
        int compId = 0;
        for(i=sortedNode.size()-1;i>=0;i--)
        {
            if ( vis [sortedNode [i]] )
                dfs2(sortedNode [i], ++compId);
        }
        printOutput(compId);
    }
    return 0;
}

UVA 247 - Calling Circles

#include<bits/stdc++.h>
#define mx 105
using namespace std;
vector<int>vec[mx],ultavec[mx];
vector<string>allnames;
vector<int>dhokalam;
map<string,int>mp;
int vis[mx],ar[mx],newline=0,cs=1,n,m;
void dfs(int u)
{
    vis[u]=1;
    int v,j;
    for(j=0;j<vec[u].size();j++)
    {
        v=vec[u][j];
        if(vis[v]==0)
        {
            dfs(v);
        }
    }
    dhokalam.push_back(u);
}
void dfs2(int u,int c)
{
    vis[u]=0;
    int v,j;
    ar[u]=c;
    for(j=0;j<ultavec[u].size();j++)
    {
        v=ultavec[u][j];
        if(vis[v]==1)
        {
            dfs2(v,c);
        }
    }
}
void print(int len)
{
    if(newline!=0)
        printf("\n");
    newline=1;
    int i1,j;
    int spc=0;
    printf("Calling circles for data set %d:\n",cs++);
    for(i1=1;i1<=len;i1++)
    {
        spc=0;
        for(j=1;j<=n;j++)
        {
            if(ar[j]==i1)
            {
                if(spc==1)
                {
                    printf(", ");
                }
                spc=1;
                cout<<allnames[j-1];
            }
        }
        printf("\n");
    }
}
main()
{
    while(cin>>n>>m)
    {
        if ( n == 0 && m == 0 ) break;
        int i,cnt=1;;
        for(i=0;i<=mx;i++)
        {
            vec[i].clear();
            ultavec[i].clear();
        }
        allnames.clear();
        mp.clear();
        newline=0;
        string s,s1;
        for(i=1;i<=m;i++)
        {
            cin>>s>>s1;
            if(mp[s]==0)
            {
                mp[s]=cnt++;
                allnames.push_back(s);
            }
            if(mp[s1]==0)
            {
                mp[s1]=cnt++;
                allnames.push_back(s1);
            }
            vec[mp[s]].push_back(mp[s1]);
            ultavec[mp[s1]].push_back(mp[s]);
        }
        for(i=1;i<cnt;i++)
        {
            if(vis[i]==0)
            {
                dfs(i);
            }
        }
        int k=dhokalam.size()-1;
        cnt=0;
        for(i=k;i>=0;i--)
        {
            if(vis[dhokalam[i]]==1)
            {
                dfs2(dhokalam[i],++cnt);
            }
        }
        print(cnt);
    }
}

শুক্রবার, ২১ জুলাই, ২০১৭

UVA 11504 - Dominos

#include<bits/stdc++.h>
using namespace std;
#define MX 1110000
long node,edge,vis[MX];
vector<long>vec[MX];
vector<long>vec1;
void dfs(long  u)
{
    long j;
    vis[u] = true;
    for(j=0;j<vec[u].size();j++)
    {
        long  v = vec[u][j];
        if(vis[v]==0)
        {
            dfs(v);
        }
    }
    vec1.push_back(u);
}
int main()
{
    long  ts;
    cin>>ts;
    while(ts--)
    {
        long a,b,i,cnt=0,x;
        cin>>node>>edge;
        for(i=1;i<=edge;i++)
        {
           cin>>a>>b;
           vec[a].push_back(b);
        }
        memset(vis,0,sizeof(vis));
        for(i=1;i<=node;i++)
        {
            if(vis[i]==0)
            {
                dfs(i);
            }
        }
         memset(vis,0,sizeof(vis));
        x=vec1.size()-1;
        for(i=x;i>=0;i--)
        {
            if(vis[vec1[i]]==0)
            {
                dfs(vec1[i]);
                cnt++;
            }
        }
        cout<<cnt<<endl;
        vec1.clear();
        for(i=0;i<MX;i++)
        {
            vec[i].clear();
        }
    }
    return 0;
}

রবিবার, ১৬ জুলাই, ২০১৭

C++ Code sum and multiplication by using class oboject

#include <iostream>
#include <math.h>
using namespace std;
class summation
{
     int a,b,sum,mul;
public:
    void getdata();
    void calculation();
    void putdata();

};
void summation ::getdata()
{

    cout<<"enter two numbers: ";
    cin>>a>>b;
}
void summation ::calculation()
{

    sum=a+b;
    mul=a*b;
}
void summation ::putdata()
{
    cout<<sum<<" "<<mul;
}
int main()
{

    summation s;
    s.getdata();
    s.calculation();
    s.putdata();
}

বৃহস্পতিবার, ৬ জুলাই, ২০১৭

UVA 12416 - Excessive Space Remover

#include<bits/stdc++.h>
using namespace std;
main()
{
    string s;
    while(getline(cin,s))
    {
        double mx=0.0,cnt=0.0;
        long i;
        for(i=0;i<s.size();i++)
        {
            if(s[i]==' ')
                cnt+=1.0;
            else
            {
                mx=max(mx,log2(cnt));
                cnt=0.0;
            }
        }
        cout<<ceil(mx)<<endl;
    }
}

Factory Pattern

Factory Method  is a creational design pattern that provides an interface for creating objects in a superclass but allows subclasses to alte...